我在实现iOS版应用的AES128位加密/解密发送/ .NET从服务器接收数据,我几乎完成了,但单元测试过程中我得到了加密字符串的一些问题,一些加密的字符串不如.NET服务器类似,CAN说98个%的字符串是在两侧正确的,但问题进来2名%的字符串,当我匹配两侧加密的字符串,然后在iOS的最终发现生成的字符串是有点短和.NET到底是长长的一串。 还有一两件事,我发现了iOS字符串是.NET串子。 当我试图解密的iOS生成的加密字符串,它不解密显示为空,但是当我尝试解密生成的加密字符串的.NET服务器(它比iOS版大)我能够瑟解密的字符串。
使用相同的密钥(16个字符长的服务器和iOS结束)。
请你提出解决方案或者我错了。
非常感谢所有。
原来的字符串: “CUSTID = 10&模式= 1” KEY = “PasswordPassword”
在iOS的加密字符串:r51TbJpBLYDkcPC + Ei6Rmg ==
在.NET encrpted字符串:r51TbJpBLYDkcPC + Ei6RmtY2fuzv3RsHzsXt / RpFxAs =
填充用于加密= kCCOptionPKCS7Padding;
我跟着这个教程。 http://automagical.rationalmind.net/2009/02/12/aes-interoperability-between-net-and-iphone/
在CryptoSE发现了类似的问题
我的版本TL; DR
从本质上讲.NET和iOS都有不同的实现方式,因为你是下面的指南是从2009年我就想到,这是相当过时了现在给出自那时以来已经有至少1个重大修订凸起在每个平台。
原来的答案提供了以下答案:
我可以马上想到的原因有四:
他们既没有使用AES256。 我的对象 - 文档中看到直接的声明,他们正在使用AES256(除非你刻意改变它),我没有看到在Visual Basic文档中说,他们正在使用的密钥大小(除非这是任何声明他们由“块位”)的意思。
不同的密钥。 AES256需要256位的密钥; 有没有采取五个字符串并转换到这256位值标准方法。 现在,有很多可能的方法; 有没有具体的保证,他们都使用相同的一个。
不同的模式操作。 的AES块密码需要128位的值,并将其转换到这128位的值。 然而,并非所有的消息可以放入128位,此外,有时也有我们想要做的比其他消息加密其他的东西。 操作模式是采用一个分组密码,并使用它作为一种工具来执行一些更普遍有用的功能(例如加密长得多的消息)的方法。 有若干操作的标准模式中,对象 - 文件指出,它是使用CBC模式; 在Visual Basic文档有可能是CBC模式的乱码explination可怕的冠冕堂皇的话。
的IV。 一些操作模式(例如CBC模式)具有与加密器选择一个“初始化向量”随机; 可以沿着与所述加密的消息被转换(因为解密器将需要的值)。 其中一个,这个初始化向量做,如果你加密消息第二次,第二密文不会像在所有第一密文的东西; 这样,有人倾听,将无法推断出你只是重复的消息。 与obj-C文件明确表示,将选择一个随机IV(除非告诉给它一个自己)。
正如你所看到的,有一堆的理由两个密文可能会有所不同。 有一两件事你可以尝试:从一个到另一只手的密文,并要求他们对其进行解密; 如果他们能做到,你可以相当肯定,双方基本上都做同样的事情。
正如你所看到的,有一堆的理由两个密文可能会有所不同。 有一两件事你可以尝试:从一个到另一只手的密文,并要求他们对其进行解密; 如果他们能做到,你可以相当肯定,双方基本上都做同样的事情。