0
|
millimoose Tomasz Nurkiewicz · 技术社区 · 5 年前 |
1
5
密码不应直接用作密钥,但可以用于生成具有KDF的密钥。这是因为一个密钥应该有一定的大小,而且密码很弱——它们只使用有限的字节集,而且通常包含单词。这使得他们容易受到暴力和字典攻击。KDFs不仅生成长而统一的密钥,而且还引入了一个工作因素,使得暴力攻击不切实际。
Crypto提供两个基于密码的kdf,scrypt和PBKDF2。最好使用scrypt,因为它在CPU和内存资源方面非常昂贵,并且可以针对并行处理进行调整,而PBKDF2只消耗CPU资源。两个kdf都需要一个salt,它应该是长且随机的。
使用创建密钥
使用创建密钥
其中“sha256”是底层散列,10000是确定工作因子的建议最小迭代次数。在scrypt中,一般工作系数是一个可选参数,默认值为16384(2^14),可以在
最后,Argon2被认为是一个非常好的KDF,与scrypt一样,它可以根据CPU和内存消耗以及并行处理进行调整。尽管Argon2在中不可用
|
2
0
破解密码的难度更多地取决于使用的算法,而不是密码的长度。(省略暴力攻击) 密钥扩展不会增加安全性,因为您在开始时仍然拥有相同的短密码。为了您的安全,请立即假设您有一个闯入和应用程序代码泄漏。也就是说,所有标准和自定义算法都是公共的。 无论如何,您必须使用密码扩展,因为大多数算法都需要具有特定长度的密码。 早前的回答,有点离题。最好的方法是将密码处理成二进制缓冲区(字符串)。 对称加密正是基于这样一个事实,即拥有可以执行反向操作的机密。 对称的 平均操作是可逆的。 您的编程语言、框架或库无关紧要。 一些差异是在打包加密消息的阶段。您可以接收一条原始消息,也可以接收一条格式优美的消息,其中您在base64中添加了IV和内容。
您还必须以同样的方式处理密钥。但这是关于编码的
总而言之:你不需要影响加密过程本身,你需要检查电子所需要的数据。 例如,我的解密过程(在节点中,来自PHP的数据):
对于PHP encrypt:
如您所见,我必须找到在两个平台上实现的加密算法,并提供在两个平台上提供相同密钥的方法。 |
Softly · 单选按钮未按预期取值 1 年前 |
SlickRed · 我无法使用JS关注HTML元素 1 年前 |
assembler · Nextjs没有处理发布请求 1 年前 |
BADRUM · 执行两个获取功能后,如何导航回页面? 1 年前 |
Toniq · javascript为php保存多维数组 1 年前 |