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

努力的大名

## 结论 #### 情况一 就当前 `crypto-js` 例子而言,原因大概率是原文作者有一些额外的配置,但是没保留到教程代码中,也就是 **代码脱敏** (正常来说,如果要脱敏那运行结果也不会使用他加盐之后生成的密文,但也可能懒得再运行一遍,反正盐没有暴露就问题不大) #### 情况二 还有一种可能性,就是题主所使用的版本和参考文章使用的 **版本不一致** ,我使用最新的版本与题主的加密结果是一致的,(这种 **可能性不大** ,虽然不知道具体版本,但是 `CBC` 是确定性加密算法,基本不会有大变动的,21 年的文章也不算特别久远) 但是可能性不是 0 ,因为不同版本可能会对初始变量的迭代次数作调整,出于这点考虑,还是保留情况二作为参考 总得来说,能正常的加密解密就没有大问题 ## 额外补充 当然,有部分算法也会设计成相同的输入能产生不同的输出,因为如果固定的输入就一定能保证固定的输出,那 **安全性就相对降低** 了,因为可以用大量的加密案例去套一个【字典】来暴力破解(这就是 `md5` 会有部分网站能解密的原因) 所以现在也有一些算法不会让某个加密文本输出一致(例如 `CTR`,会有一个计数器,来确保每次加密都产生不同的结果),虽然加盐(`salt`)也足以解决大部分的情况,但从算法本身而言这种设计肯定是更安全的 当然,以上不适用于题主的例子,因为 `CBC` 在参数(秘钥、初始向量、加密值等)一致的情况下,是有固定输出的

阅读量:1

点赞量:0

问AI