如何使SJCL和Python hashlib生成相同的pdkdf2输出

2024-03-28 19:49:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个JavaScript应用程序和一个Python应用程序,它们使用pbdkf2从密码派生的密钥进行通信。问题是,生成的密钥不匹配。我为每一个都生成了一个最小的测试用例。在

Python

import hashlib, binascii
bytes = hashlib.pbkdf2_hmac('sha256', "password".encode(), b'', 100000)
print(binascii.hexlify(bytes).decode())

生成:64a868d4b23af696d3734d0b814d04cdd1ac280128e97653a05f32b49c13a29a

JavaScript

^{2}$

生成:41c04f824d843d5be0ae66b3f621d3f05db7d47e7c46ee0e9171b5cbff7f3631

我现在经常挠头。我认为b''和{}是等效的盐,但我不确定。我想他们都用utf-8来编码密码,但我不确定。我不相信JavaScript hmacSHA256函数与Python所做的完全匹配。也可能是别的什么。在


Tags: import应用程序密码bytes密钥测试用例passwordjavascript
1条回答
网友
1楼 · 发布于 2024-03-28 19:49:43

你查过了吗

hash = sjcl.misc.pbkdf2("password", "", 100000, 256);

给出正确的结果?在

docs可以看出,如果没有显式地给SJCL一个PRF,那么它的PBKDF2实现默认为HMAC-SHA256。如果更改修复了该错误,则hmacSHA256包装可能有问题。在

另外,我不确定将空salt指定为[0]是否真的有效(或者在将来的版本中保证可以工作,因为SJCL的位数组的格式是explicitly subject to change),但是""肯定应该起作用。在

相关问题 更多 >