【发布时间】:2012-01-30 06:40:28
【问题描述】:
我已经能够在 php 和 Objective-c 代码中成功地加密和解密 AES-256。我不会在这里发布任何代码,因为我尝试了很多品种但都没有工作。我不知道这些加密函数是如何工作的...... AES 是一种标准化算法,所以为什么它在我的想法中不起作用归结为
a) 静脉注射
b) 一些编码错误
或
c) 填充的差异(应该与解密无关)。
如果有人拥有在 php 和 Objective-c 中都可以使用的 AES 函数,那就太好了,但如果没有,任何帮助理解导致这些不同结果的原因将不胜感激。
如果您想要一个更狭窄的问题,它是关于此 AES 密码的编码、iv 和块大小。
1) 就密钥和明文/密文而言,使用什么编码是否重要?基本上我猜这不是纯文本的问题,因为我会使用的所有字符(至少在测试期间)都是标准的 ASCII 符号。但是可以说php字符串是ASCII,我在objective-c中使用UTF8 ...我不知道php是否使用ASCII或字节ie。两者的关键是不同的。
2) 据我所知,ECB 模式不使用 iv(如果错误则正确)。 CBC 模式使用 iv。在这种情况下,iv 必须与密文一起记录。现在这个密钥在 php 中是 16 或 32 个字符长(取决于 128 与 256 块大小)。这意味着 16 或 32 字节?字符串 1234567890123456789012 转换为字节后在 ASCII 和 UTF8 中是否相同?
3) 就算法而言,块大小和密钥大小有什么区别? (如果错误,再次正确)基本上它们都是相同的算法,只是参数不同?使用 256 位密钥与 128 位密钥只是传递哪个密钥的问题
(另外,请注意,我一直在使用 base64 编码在应用程序之间传输字符串以进行测试)
谢谢, 以利亚
【问题讨论】:
-
... I could not get openssl to work on the Mac with an error那么,你为什么不问一个关于那个特定错误的问题呢? -
因为在这一点上,我什至认为这行不通。我在 NSData AES256EncryptWithKey 上使用了一个类别,这也适用于 Mac 上的解码。我得到的“特殊错误”是代码,一旦在objective-c中加密并以base-64打印到控制台,就不会使用php解密。
-
对不起,最后一句话不相关
标签: php objective-c cryptography cross-platform aes