AES128位加密字符串与.net上的字符串不相似

我在iOS应用程序中实现AES128位加密/解密用于从.net服务器发送/接收数据,我差不多完成了但是在unit testing期间我遇到了加密字符串中的一些问题,一些加密字符串与.net服务器上的字符串不相似,可以比方说98%的字符串在两边都是正确的,但问题是2%字符串,当我匹配双方加密字符串然后在iOS结束时发现生成的字符串有点短而.net结束它是长字符串。 还有一件事我发现iOS字符串是.net字符串的子字符串。 当我试图解密iOS生成的加密字符串时,它没有解密显示null但是当我尝试解密.net服务器生成的加密字符串(它比iOS大)时,我能够查找解密的字符串。

使用相同的KEY(服务器端和iOS端16个字符)。

你能建议解决方案或我错在哪里吗?

非常感谢所有人。

原始字符串:“custId = 10&mode = 1”KEY =“PasswordPassword”

在iOS加密字符串:r51TbJpBLYDkcPC + Ei6Rmg ==

at .net encrpted string:r51TbJpBLYDkcPC + Ei6RmtY2fuzv3RsHzsXt / RpFxAs =

padding for encryption = kCCOptionPKCS7Padding;

我按照本教程。 http://automagical.rationalmind.net/2009/02/12/aes-interoperability-between-net-and-iphone/

在CryptoSE上发现了类似的问题

我的版本TL; DR

基本上.net和iOS都有不同的实现,因为你所关注的指南是从2009年开始我认为它已经过时了,因为从那时起每个平台至少有一个主要的修订版本。

原始答案给出以下答案:

我可以立即想到四个原因:

  1. 他们都没有使用AES256。 我在Obj-C文档中看到他们正在使用AES256的直接声明(除非你故意改变它),我在Visual Basic文档中没有看到任何声明说明他们正在使用的密钥大小(除非他们是这样的)意思是“Block Bits”)。

  2. 不同的钥匙。 AES256采用256位密钥; 没有标准的方法来获取五个字符串并将其转换为256位值。 现在,有很多可能的方法; 没有特别保证他们都使用同一个。

  3. 不同的操作方式。 AES分组密码采用128位值,并将其转换为128位值。 但是,并非所有消息都可以容纳128位,此外,除了消息加密之外,有时我们还想做其他事情。 操作模式是一种采用分组密码的方法,并将其用作执行一些更普遍有用的function的工具(例如加密更长的消息)。 有许多标准操作模式,Obj-C文件表明它正在使用CBC模式; Visual Basic文档有可怕的声音,可能是CBC模式的乱码。

  4. 的IV。 某些操作模式(如CBC模式)使加密器随机选择“初始化矢量”; 可以与加密消息一起翻译(因为解密器将需要该值)。 如果你第二次加密消息,这个初始化向量会做的事情之一,第二个密文根本不会像第一个密文那样; 这样,有人倾听将无法推断出你只是重复了一条消息。 Obj-C文件特别指出它将随机选择一个IV(除非告诉你自己给它一个)。

  5. 正如您所看到的,有两个原因导致两个密文可能不同。 你可以尝试一件事:将密文从一个密文交给另一个,并要求他们解密; 如果可以的话,你可以非常肯定双方基本上都在做同样的事情。


正如您所看到的,有两个原因导致两个密文可能不同。 你可以尝试一件事:将密文从一个密文交给另一个,并要求他们解密; 如果可以的话,你可以非常肯定双方基本上都在做同样的事情。