【问题标题】:CryptoJS AES encryption output not matchingCryptoJS AES 加密输出不匹配
【发布时间】:2015-08-12 01:06:28
【问题描述】:

我遇到了 CryptoJS 的问题。

我尝试加密 a 字符串,但它给出了不同的输出。

字符串:“测试消息” 键:“123456”

这是我尝试运行的测试代码

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script>
   var encrypted = CryptoJS.AES.encrypt("test message", "123456");


   alert(encrypted);              //U2FsdGVkX19Nf4gjPS3MUcbKBD10P/Ty/4EwUF1PMhc=
</script>

它返回了输出 U2FsdGVkX19Nf4gjPS3MUcbKBD10P/Ty/4EwUF1PMhc=

但是在这个网站 http://aesencryption.net/ 我得到 fulfuBaIGS0AqxwyXoPCgw== 结果。

如何使用 CryptoJS 生成加密输出为 fulfuBaIGS0AqxwyXoPCgw==?

【问题讨论】:

  • "123456" 不是 AES 的有效密钥。它必须是 16、24 或 32 字节长。实际的密钥是如何从那个 password 派生的?该站点默认使用什么操作模式?

标签: javascript encryption aes cryptojs


【解决方案1】:

那些网站很糟糕,因为它们不会告诉你加密某些东西时实际发生了什么。在线加密下面的两个示例代码是不同的,并且不会产生与在线加密相同的东西。

似乎this answer 为该站点提供了 C# 中的工作代码。如果这是真的,那么您将无法在 CryptoJS 中重现这一点,因为 CryptoJS 仅支持 AES,而该示例 C# 代码使用 Rijndael(注意 256 位的块大小)。

AES 仅针对 128 位的固定块大小定义,但 Rijndael 支持 128、192 和 256 位块大小。两者都支持 128、192 和 256 位的密钥大小。 CryptoJS 实际上只实现了 AES,但是尽管它的名字,该站点并没有使用 AES。

【讨论】:

    猜你喜欢
    • 2013-07-20
    • 1970-01-01
    • 2016-12-17
    • 2015-11-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多