使用crypto-js时所有配置都一样,加密出来的值竟然不一样?

使用crypto-js时,key,iv,方法,mode,padding都一样,要加密的数据也一样,完全按照下面的方法,加密后的值竟然和这例子上的不一样?这是为什么?

https://mp.weixin.qq.com/s/cKl3XUZtuA3syDh6WrPZGA

例子上的结果是:
image.png
我求出来是:
image.png
但是我解密也是能解出来的。

阅读 1.6k
1 个回答

结论

情况一

就当前 crypto-js 例子而言,原因大概率是原文作者有一些额外的配置,但是没保留到教程代码中,也就是 代码脱敏 (正常来说,如果要脱敏那运行结果也不会使用他加盐之后生成的密文,但也可能懒得再运行一遍,反正盐没有暴露就问题不大)

情况二

还有一种可能性,就是题主所使用的版本和参考文章使用的 版本不一致,我使用最新的版本与题主的加密结果是一致的,(这种 可能性不大,虽然不知道具体版本,但是 CBC 是确定性加密算法,基本不会有大变动的,21 年的文章也不算特别久远)

但是可能性不是 0 ,因为不同版本可能会对初始变量的迭代次数作调整,出于这点考虑,还是保留情况二作为参考

总得来说,能正常的加密解密就没有大问题

额外补充

当然,有部分算法也会设计成相同的输入能产生不同的输出,因为如果固定的输入就一定能保证固定的输出,那 安全性就相对降低 了,因为可以用大量的加密案例去套一个【字典】来暴力破解(这就是 md5 会有部分网站能解密的原因)

所以现在也有一些算法不会让某个加密文本输出一致(例如 CTR,会有一个计数器,来确保每次加密都产生不同的结果),虽然加盐(salt)也足以解决大部分的情况,但从算法本身而言这种设计肯定是更安全的

当然,以上不适用于题主的例子,因为 CBC 在参数(秘钥、初始向量、加密值等)一致的情况下,是有固定输出的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进