- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个与帖子相关的问题: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编码的。
谁能指出这段代码有什么问题?
谢谢!
最佳答案
输出看起来不同的原因是Base64的输入不同;原因是在 JavsScript 代码中,您调用了
key.toString()
因此,在 JavaScript 中,您对 64 个字符的字符串进行了 base64 编码
"00d7a91fdf03a991ed324915ac893f08d99fca454f7c4169a1ac763c5f33e64f"
在 jn Objective-C 中,你对原始的 32 字节序列进行了 base64 编码
0x00 0xd7 0xa9 0x1f 0xdf ... 0xe6 0x4f
在这两种情况下,您的 PBKDF2 代码都提供了相同的 key 。您只是在每种情况下对 key 进行了不同的编码。
您可以通过直接序列化 key 让 CryptoJS 创建相同的 Base64 输出,如下所示:
key.toString(CryptoJS.enc.Base64)
(有关文档,请参阅 https://code.google.com/p/crypto-js/#The_Hasher_Output。您可能必须包含另一个脚本文件才能使用此输出格式)
关于javascript - javascript 和 iOS 中的 PBKDF2 哈希生成不同的 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28681409/
我在 C# 中有以下代码 PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes,
是否有任何 python PBKDF (pkcs12) 实现?请注意,我不是在寻找 PBKDF1 或 PBKDF2 (pkcs5) 实现,而是在寻找 pkcs12 实现。正如本 question 中所
我是一名优秀的程序员,十分优秀!