【问题标题】:Create CryptoJS AES Cipher Encryptor to Decrypt in .NET创建 CryptoJS AES 密码加密器以在 .NET 中解密
【发布时间】:2015-01-23 14:15:40
【问题描述】:

我正在尝试创建将在服务器/客户端之间工作的加密/解密。我的客户端有 CryptoJS,服务器端有 ASP.Net (VB.Net)。服务器端正在许多地方使用,因此无法更改,因此 CryptoJS 需要解决 .NET 正在做的事情。我无法让我的 CryptoJS 100% 模仿 .NET。

仅供参考,.NET 代码无法更改,JS 必须匹配 .NET 功能。

应要求删除代码

我在尝试解密客户端加密时在 .NET 中遇到的错误:

填充无效,无法移除。

额外信息

如果我只是通过一个十六进制作为键(删除.toString(CryptoJS.enc.Latin1)),我没有得到足够的字符(似乎更改为 128 位而不是 256 位)。

JS中MD5_Key返回的实际数据好像和.NET中的Validate_MD5匹配...

我是否正在努力实现不可能的目标?

【问题讨论】:

  • 有趣...我不是加密人,但客户端脚本中的“密钥和秘密”让我不寒而栗...跨度>
  • @EdSF 它将在应用程序中,因此对掠食者来说不太容易,但会使用混淆;)。

标签: javascript asp.net aes md5 cryptojs


【解决方案1】:

CryptoJS 仅支持基本上是 Rijndael 的 AES,但仅限于 128 位的块大小。它支持 128、192 和 256 位的密钥大小。您的 .net 代码使用块大小为 256 的 Rijndael,CryptoJS 不支持。 CryptoJS 很乐意接受大 IV,并且只使用前 16 个字节。

您必须找到另一个支持此功能的库,因为您无法更改 .net 代码。

【讨论】:

  • 我不知道有哪个图书馆可以做到这一点。
  • 抱歉我缺乏理解,但我不明白我是如何设法使用字符串创建 256 位密钥的,但如果我使用十六进制,我只能制作 128位钥匙?我猜生成密钥的大小与块大小无关?
  • 没错,密钥大小与块大小无关。
  • 如何在 .NET 中生成 128 位块大小的 256 位密钥?我尝试只更改块大小字段和 IV,但它只生成一个 128 位密钥
  • 我真的不明白MD5_KeyValidate_MD5 会如何做同样的操作,但你说你检查过了。我不熟悉.net,所以我不知道ReDim Preserve ReturnValue(BlockSize - 1) 应该做什么。我怀疑您可以删除MD5_Key 正文的第一行和最后一行之间的所有内容。 CryptoJS 也采用本地数据表示,而不是一些字符串编码。另请注意,Hex.parse(MD5Key).toString(CryptoJS.enc.Latin1) 可能会丢弃一些字节,因为它们不可打印。
猜你喜欢
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多