PBKDF2 с SHA256 на Android

Я хочу сгенерировать производный хэш пароля, используя PBKDF2 с SHA256. с этим SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1") эта работа, но он использует SHA1. С SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256") (или SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256","SC") с губчатым замком) у меня возникает ошибка.

Как мне сгенерировать хеш, используя PBKDF2WithHmacSHA256?


person Kowlown    schedule 24.07.2012    source источник


Ответы (2)


Если вы используете SpongyCastle версии 1.47 или выше, вы можете напрямую вызвать PBKDF2WithHmacSHA256:

PKCS5S2ParametersGenerator generator = new PKCS5S2ParametersGenerator(new SHA256Digest());
generator.init(PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(password), salt, iterations);
KeyParameter key = (KeyParameter)generator.generateDerivedMacParameters(keySizeInBits);

В версиях BC ‹ 1.47 нельзя было указать дайджест SHA256, и по умолчанию использовался SHA1.

person k3v    schedule 08.03.2013
comment
Ага, работает. Сам Android не поддерживает криптографию AES256, поэтому вам нужно вышеперечисленное. Байт[], который вы получаете с помощью key.getKey() и импорта Spongy Castle, очень прост: добавьте следующее в свои зависимости в build.gradle: compile 'com.madgag.spongycastle:core:1.54.0.0' compile 'com.madgag .spongycastle:prov:1.54.0.0' скомпилировать 'com.madgag.spongycastle:pkix:1.54.0.0' скомпилировать 'com.madgag.spongycastle:pg:1.54.0.0' - person MacD; 27.05.2016
comment
compile 'com.madgag.spongycastle:core:1.54.0.0' достаточно, вам не нужны дополнительные зависимости, перечисленные @MacD - person tomrozb; 02.12.2016

Bouncy Castle не поддерживает PBKDF2WithHmacSHA256, так что это не сработает. Вы можете попробовать реализовать его самостоятельно. Посмотрите на источник PKCS5S2ParametersGenerator.java и замените SHA1Digest на SHA256Digest.

person Nikolay Elenkov    schedule 25.07.2012
comment
Знаете ли вы, существует ли какая-либо существующая библиотека, совместимая с Android, которая имеет эту реализацию? - person Kowlown; 25.07.2012
comment
Ни о ком не слышал. Однако почти все должно быть совместимо, поскольку на самом деле это не делает ничего специфичного для платформы. - person Nikolay Elenkov; 25.07.2012