2015-11-27 2 views
2

У меня есть два метода в Java, и я хочу делать те же методы в php. Я не знаю абсолютно ничего в php. Как мне это сделать?Шифрование SHA1 и SHA1 в Hex в php

Метод 1:

public static String encyptPassword (String in) throws UnsupportedEncodingException, NoSuchAlgorithmException{ 
    byte[] bytes=in.getBytes("UTF-8"); 
    MessageDigest md=MessageDigest.getInstance(MGF1ParameterSpec.SHA1.getDigestAlgorithm()); 
    md.update(bytes); 
    byte[] digest=md.digest(); 
    return toHex(digest); 
} 

Метод 2:

public static String toHex(byte[] bytes) { 
    BigInteger bi = new BigInteger(1, bytes); 
    return String.format("%0" + (bytes.length << 1) + "x", bi); 
} 

метода (? Функция) в PHP должен иметь тот же результат, как и в Java, потому что это хэширования паролей для работы и система онлайн-входа.

Я пробую его около 3 часов, но я не могу этого сделать или найти решение. Кажется, я прочитал все сообщения в Stack. Вы можете мне помочь? Благодарю.

+0

Имейте в виду, что хеширующие пароли с SHA * небезопасны e, особенно несоленые, потому что это слишком быстро. SHA1 может быть грубо принудительно со скоростью [30 Giga SHA1/second] (http://hashcat.net/oclhashcat/#performance), поэтому следует использовать медленную хеш-функцию с коэффициентом стоимости, например, BCrypt или PBKDF2. – martinstoeckli

ответ

2

PHP Fiddle - хит бежать, чтобы увидеть результат

<?php 

    $pass = '[email protected]'; 
    $hashed = hash("SHA512", $pass); 
    echo $hashed; 
    echo '<hr>' . bin2hex($hashed); 

?> 

выше sha512, что, безусловно лучше, sha1 и Bcrypt с достаточно высокой стоимостью считается как best current

+0

Спасибо, что помогли мне. Я выбираю ваш ответ, потому что вы сказали мне, как хэш и как его использовать. @Sammitch - хороший ответ с довольно хорошей ссылкой, которую я буду изучать. gregn3 дают тот же ответ. Еще раз спасибо вам всем. – Alan

+0

Вы приветствуете, и я рад, что это помогло, что @Sammitch написал передовую практику, 'sha1' производит 40 символов, а для простых и известных паролей он настолько взломан с грубой силой или радугой или такими методами, есть несколько сайтов который предлагает «* decrypting *» их бесплатно, i.re: https://hashkiller.co.uk/sha1-decrypter.aspx, 'sha512' лучше, чем 128 символов, но если вы используете его с динамическим засолением что улучшает его гораздо лучше, новый встроенный пароль_шт ($ string) в настоящее время является лучшим выбором. пользоваться кодированием –

2
  1. Hashing != Encryption
  2. SHA1 слаб, SHA2 лучше, Bcrypt в настоящее время является лучшим в целом доступным алгоритм хэширования для хранения паролей.
  3. $myHash = hash("SHA1", "foobar")Docs
  4. Не использовать # 3, используйте $myActuallySecureHash = password_hash("foobar")Docs
  5. Используйте # 4.
  6. PHP < 5.4 is not an excuse.
+0

Хорошо. Это хеширующий пароль. Вы знаете способ «toHex ($ myActuallySecureHash)»? – Alan

+1

@Alan Как насчет '$ hex = bin2hex ($ myActuallySecureHash);'? – gregn3

Смежные вопросы