SCrypt在x64平台上产生不同的结果

时间:2017-07-17 12:58:45

标签: scrypt

我在我的Android应用中使用此库https://github.com/wg/scrypt。 我可以成功编译它并在我的android应用程序中绑定本机实现,但是如果它在32位或64位环境中执行,scryptN函数会产生不同的结果,它怎么可能呢? 相反,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位架构上运行,您将获得不同的输出

谢谢

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案:

对于在Android上使用此库的任何人,我建议使用此分支

https://github.com/lhunath/scrypt

它有一个完整的android ndk项目设置,你只需要从src / android / jni文件夹运行ndk-build(当然你需要正确配置NDK)它会生成一组工作的.so文件

注意:您必须更改Application.mk文件才能为所有平台生成它们