javascript和iOS中的PBKDF2哈希生成不同的密钥

coder_andy

这是与帖子相关的问题: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"

在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。您可能必须包括另一个脚本文件,此输出格式才可用)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#和NodeJS中生成PBKDF2密钥

来自分类Dev

如何使用PBKDF2在Java和Ruby中生成相同的安全哈希

来自分类Dev

验证.NET中Python Passlib生成的PBKDF2 SHA512哈希

来自分类Dev

验证.NET中Python Passlib生成的PBKDF2 SHA512哈希

来自分类Dev

PBKDF2是否生成唯一的哈希?

来自分类Dev

PBKDF2和Java中的HMAC

来自分类Dev

Ironclad和Couch PBKDF2哈希之间的不匹配

来自分类Dev

Java和打字稿产生差异PBKDF2哈希

来自分类Dev

如何从密码和 PBKDF2 迭代中获取原始密钥数据

来自分类Dev

Crypto ++ pbkdf2输出不同于Rfc2898DeriveBytes(C#)和crypto.pbkdf2(JavaScript)

来自分类Dev

HKDF或PBKDF2用于生成对称加密密钥?(Python密码学)

来自分类Dev

使用 pkcs11interop、c#、windows Visual Studio 2010 生成 PBKDF2 密钥

来自分类Dev

Perl中Crypt :: PBKDF2中HMACSHA2哈希的大小是多少?

来自分类Dev

在.NET中使用PBKDF2和HKDF进行密码哈希处理

来自分类Dev

使用盐和迭代计数的用户密码的Java / Node PBKDF2哈希-等效节点

来自分类Dev

PBKDF2和C#问题

来自分类Dev

是否可以恢复PBKDF2哈希密码?

来自分类Dev

PBKDF2 Python密钥与.NET Rfc2898

来自分类Dev

openssl如何使用PBKDF2构造从密码派生的密钥?

来自分类Dev

如何从生成的 PBKDF2 密码的字节数组中获取字符串

来自分类Dev

使用带有128位密钥的AES和PBKDF2的Java密码体系结构进行文件加密

来自分类Dev

PBKDF2 未在 C# 中返回明文和散列期望值

来自分类Dev

php和node.js之间的pbkdf2的差异

来自分类Dev

在Java和PHP中使用PBKDF2

来自分类Dev

用PBKDF2盐腌和散列

来自分类Dev

每次按下按钮时,带有HMAC SHA1的Java PBKDF2实现都会返回不同的哈希值?

来自分类Dev

如何在mongoDB中存储加密pbkdf2?

来自分类Dev

在Java中具有HMAC的PBKDF2

来自分类Dev

jasypt PBKDF2实现

Related 相关文章

  1. 1

    在C#和NodeJS中生成PBKDF2密钥

  2. 2

    如何使用PBKDF2在Java和Ruby中生成相同的安全哈希

  3. 3

    验证.NET中Python Passlib生成的PBKDF2 SHA512哈希

  4. 4

    验证.NET中Python Passlib生成的PBKDF2 SHA512哈希

  5. 5

    PBKDF2是否生成唯一的哈希?

  6. 6

    PBKDF2和Java中的HMAC

  7. 7

    Ironclad和Couch PBKDF2哈希之间的不匹配

  8. 8

    Java和打字稿产生差异PBKDF2哈希

  9. 9

    如何从密码和 PBKDF2 迭代中获取原始密钥数据

  10. 10

    Crypto ++ pbkdf2输出不同于Rfc2898DeriveBytes(C#)和crypto.pbkdf2(JavaScript)

  11. 11

    HKDF或PBKDF2用于生成对称加密密钥?(Python密码学)

  12. 12

    使用 pkcs11interop、c#、windows Visual Studio 2010 生成 PBKDF2 密钥

  13. 13

    Perl中Crypt :: PBKDF2中HMACSHA2哈希的大小是多少?

  14. 14

    在.NET中使用PBKDF2和HKDF进行密码哈希处理

  15. 15

    使用盐和迭代计数的用户密码的Java / Node PBKDF2哈希-等效节点

  16. 16

    PBKDF2和C#问题

  17. 17

    是否可以恢复PBKDF2哈希密码?

  18. 18

    PBKDF2 Python密钥与.NET Rfc2898

  19. 19

    openssl如何使用PBKDF2构造从密码派生的密钥?

  20. 20

    如何从生成的 PBKDF2 密码的字节数组中获取字符串

  21. 21

    使用带有128位密钥的AES和PBKDF2的Java密码体系结构进行文件加密

  22. 22

    PBKDF2 未在 C# 中返回明文和散列期望值

  23. 23

    php和node.js之间的pbkdf2的差异

  24. 24

    在Java和PHP中使用PBKDF2

  25. 25

    用PBKDF2盐腌和散列

  26. 26

    每次按下按钮时,带有HMAC SHA1的Java PBKDF2实现都会返回不同的哈希值?

  27. 27

    如何在mongoDB中存储加密pbkdf2?

  28. 28

    在Java中具有HMAC的PBKDF2

  29. 29

    jasypt PBKDF2实现

热门标签

归档