您现在的位置是:网站首页>文章详情文章详情
Python实现CryptoJS.PBKDF2摘要算法
inlike2022-07-26【
原创文章
】
浏览(1365)
评论(0)
喜欢(4)
简介在Python中实现JavaScript中常用的CryptoJS.PBKDF2摘要算法。
什么是PBKDF2算法
PBKDF2对输入密码或密码短语以及盐值应用伪随机函数,例如基于散列的消息验证码(HMAC),并多次重复该过程以生成派生密钥,然后可将其用作加密密钥在后续的操作中。增加的计算工作使密码破解变得更加困难,并且被称为密钥拉伸。
当标准在 2000 年编写时,建议的最小迭代次数为 1,000,但该参数旨在随着 CPU 速度的提高而随着时间的推移而增加。2005 年的 Kerberos 标准建议进行 4,096 次迭代;据报道,Apple 为 iOS 3 使用了 2,000 个,为 iOS 4 使用了 10,000 个;而 LastPass 在 2011 年对 JavaScript 客户端使用了 5,000 次迭代,对服务器端哈希使用了 100,000 次迭代。2021 年,OWASP 建议对 PBKDF2-HMAC-SHA256 使用 310,000 次迭代,对 PBKDF2-HMAC-SHA512 使用 120,000 次迭代。
基于密码的密钥推导函数2的迭代过程的算法表示。
在密码中添加盐会降低使用预先计算的哈希(彩虹表)进行攻击的能力,这意味着必须单独测试多个密码,而不是一次测试。该标准建议盐长度至少为 64 位。美国国家标准与技术研究院推荐的盐长度为 128 位。
JavaScript中的使用
var salt = CryptoJS.lib.WordArray.random(128 / 8);
var secretPassPhrase = CryptoJS.lib.WordArray.random(128 / 8);
var key128Bits = CryptoJS.PBKDF2(secretPassPhrase.toString(), salt, { keySize: 128 / 32 });
如果当你在网页中发现了这样的代码,那就是使用了PBKDF2算法,该算法的两个重要参数密码和盐,一般来说salt是WordArray类型,如果直接复制他的16进制字符串,那么需要处理一下 才能在Python中使用。
import binascii
binascii.unhexlify(salt) # 将16进制字符串转为bytes类型
在Python中实现了同样算法的库是pycryptodomex,使用前需安装该库,使用方法如下:
from Cryptodome.Protocol.KDF import PBKDF2 # pycryptodomex
result = PBKDF2(secretPassPhrase, binascii.unhexlify(salt), count=100)
result = binascii.hexlify(result) # byte转16进制字符串
其中count参数是计算的次数,salt是直接从JavaScript中复制的16进制的字符串,需要转化为bytes之后再使用,secretPassPhrase是要计算的密码。
相关文章
本栏推荐

标签云
猜你喜欢
站点信息
- 建站时间:2019-5-24
- 网站程序:like in love
- 主题模板:《今夕何夕》
- 文章统计:104条
- 文章评论:***条
- 微信公众号:扫描二维码,关注我们
