我在我的 android 应用程序中使用这个库https://github.com/wg/scrypt 。我可以成功编译它并在我的 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 位架构上运行,您将获得不同的输出
谢谢