Я использую эту библиотеку https://github.com/wg/scrypt в своем приложении для Android. Я могу успешно скомпилировать его и связать нативную реализацию в своем приложении для Android, но функция scryptN дает другой результат, если она выполняется в 32-битной или 64-битной среде, как это возможно? Вместо этого реализация Java хорошо работает в обеих средах.
Чтобы воспроизвести проблему, просто соберите общие библиотеки с помощью NDK и попробуйте запустить эту функцию.
public String hashPassword(String plainPassword) {
final int shift = 14;
final int n = 1 << shift;
final int r = 8;
final int p = 1;
final int dklen = 64;
try {
return ByteUtils.toHexString(SCrypt.scrypt(
plainPassword.getBytes("utf-8"),
"theseed".getBytes("utf-8"),
n, r, p, dklen));
} catch (Exception e) {
LogHelper.e("error hashing password", e);
return null;
}
}
вы получите разные результаты, если вы работаете на 32-битной или 64-битной архитектуре.
Спасибо
plainPassword.getBytes
иtheseed".getBytes
на промежуточные переменные и проанализируйте их в шестнадцатеричном виде. Первым шагом в отладке является проверка входных данных. Сделайте код для следующего читателя и отладчика, позвольте компилятору заниматься оптимизацией, промежуточные переменные обычно объединяются во время оптимизации компилятора. - person zaph   schedule 18.07.2017