【问题标题】:PBKDF2 hashing in javascript and iOS generating different keysjavascript 和 iOS 中的 PBKDF2 散列生成不同的密钥
【发布时间】:2015-04-25 05:26:34
【问题描述】:

这是一个与帖子相关的问题:https://groups.google.com/forum/#!topic/crypto-js/t_HeWo5QhLk

我已经尝试过帖子中提到的解决方案,但仍然无法找出我的代码的问题:

使用 Crypto.js

var key= CryptoJS.PBKDF2("gf8uny", "2mnfpLsa+5I=", { keySize: 256/32, iterations: 1000 });
console.log(key.toString());
console.log(btoa(key.toString()));
//OUTPUT: MDBkN2E5MWZkZjAzYTk5MWVkMzI0OTE1YWM4OTNmMDhkOTlmY2E0NTRmN2M0MTY5YTFhYzc2M2M1ZjMzZTY0Zg==

在 iOS 中使用 CommonCrypto:

NSMutableData *webKey = [NSMutableData dataWithLength:64];
NSData *salt = [@"2mnfpLsa+5I=" dataUsingEncoding:NSUTF8StringEncoding];
NSString* password = @"gf8uny";
CCKeyDerivationPBKDF(kCCPBKDF2, password.UTF8String, password.length, salt.bytes,salt.length, kCCPRFHmacAlgSHA1, 1000, webKey.mutableBytes, webKey.length);

NSString* skey = [webKey base64EncodedStringWithOptions:0];
NSLog(@"key %@",skey);
//OUTPUT: ANepH98DqZHtMkkVrIk/CNmfykVPfEFpoax2PF8z5k+jrwa0yTNt0tQedQ4bxqV/T0gXbsyKHiVx8DuJdlkufA==

两个代码中的输出字符串都是base64编码的。

谁能指出这段代码有什么问题?

谢谢!

【问题讨论】:

    标签: javascript ios cryptojs pbkdf2


    【解决方案1】:

    输出看起来不同的原因是Base64的输入不同;原因是在 JavsScript 代码中,您调用了

    key.toString()
    

    因此,在 JavaScript 中,您对 64 个字符的字符串进行了 base64 编码

    "00d7a91fdf03a991ed324915ac893f08d99fca454f7c4169a1ac763c5f33e64f"
    

    在 Objective-C 中,您已经对原始 32 字节序列进行了 base64 编码

    0x00 0xd7 0xa9 0x1f 0xdf ... 0xe6 0x4f
    

    在这两种情况下,您的 PBKDF2 代码都提供了相同的密钥。您只是在每种情况下对密钥进行了不同的编码。

    您可以让 CryptoJS 通过直接序列化密钥来创建相同的 Base64 输出,如下所示:

    key.toString(CryptoJS.enc.Base64)
    

    (有关文档,请参阅 https://code.google.com/p/crypto-js/#The_Hasher_Output。您可能必须包含另一个脚本文件才能使用此输出格式)

    【讨论】:

    • 感谢@Ian 的回答。那么,比较两个哈希的最佳方法是什么?我需要将 js 中生成的哈希发送到 iOS 服务器并在那里比较两个值。
    • 从 CryptoJS 文档中,我建议使用 key.toString(CryptoJS.enc.Base64) -- 参见小提琴 jsfiddle.net/t1tb9jad
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2018-08-31
    • 2019-05-03
    • 2020-01-24
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多