在PHP上进行aes 256加密,并使用ios panding进行解密



我正在尝试加密服务器上的字符串并将其发送到我的iPhone。

当我在iphone上加密并在服务器上解密时,一切都没问题。

但当我试图在服务器(php page)上加密时,我无法在iPhone上解密它。

例如:当我在PHP上加密"True"时,我得到的是:

ca 82 66 c8是5a a9 fb d8 7f 25 b6 1e f0 fb 68 54 72 75 65 0 0 0 00 0 0 0

然后我做一些-base64

yoJmyL5aqfvYfyW2HvD7aA==当我把它发送到我的iphone时,我无法正确解密它。。

但当我试图在我的Iphone上加密"True"时,我得到了:

ca 82 66 c8是5a a9 fb d8 7f 25 b6 1e f0 fb 68 54 72 75 65 c c c cc c c c c c c

base64-

fwqkKsopev3Xmu4BF4OE5Q==

有人能引导我找到解决方案吗?

区别在于填充。PHP解决方案不执行标准化的填充机制。相反,它使用零填充,如果纯文本以一个00 h值字节的字符串结束,这可能会导致麻烦,因为它们将通过取消添加机制(或任何trimright_trim方法)从纯文本中删除。

您应该像CCCrypt一样,在PHP中加密之前填充纯文本。CCCrypt使用一种很好的标准化填充模式,称为PKCS#7填充。此模式总是填充1到16(块大小)字节。字节的值与填充字节的数量相同。在您的示例中,它是十六进制的0C h,或12个填充字节。

请查看StackOverflow的链接,了解如何在PHP中填充/取消填充。填充/取消填充总是在原始纯文本上执行,而不是在密文上执行。

请注意,您的密文可能是用IV值预先固定的。这前16个字节不应该被解密。它们应该被用作IV,并被解密函数跳过。通常,应该为每个加密创建一个新的IV值。否则,您将能够查看(的开头)明文是否与之前的明文相同。随机IV为每次加密改变整个密文。

相关内容

  • 没有找到相关文章

最新更新