0

我在 iOS 项目中使用 RNCryptor 进行加密。该应用程序解密从服务器发送的 JSON 字符串。在服务器上,使用RNCryptor repo中未修改版本的 PHP 函数对字符串进行加密。

使用相同的密码加密所有字符串,返回的 base64 数据有时对于我传递给 RNCryptor PHP 加密函数的不同 JSON 字符串无效。在应用程序上,我在尝试从服务器解密数据时看到此错误: “操作无法完成。(net.robnapier.RNCryptManager 错误 -4301。)”

为了向您展示一些示例,此 base64 字符串已成功解密:

AwHwsZqlDpvAcmWX92UtkQSKcHOq18gLsLFtP4FujV3DtXVrtGL86CFY9KAs23HaAoYINTLH3ouUJPpyQEcfXni+rJUJghTFBB24kk52aU0GQ/8IIgfnXPUywUuNwD4n7DnweaS3DdmdhFBQIUpSaCEg4T5bMPhIvUAndVMvJwc/SjbhJoB+bUqRDcPYXPzMiEW1i4jea/ssE87PcX9/NZtfkoNyiY7KLRy/dhgsADde1Q==

然而,这个失败了:

AwHH7y0mnQvtWNCKa73jnS2DG63ylqDBc5iema3G6+/EkwPxiIkrPQHyJLvd3MO3mMIPsJjDK1C3uBCoHDc+Gzm0NJhBa08zs1twzZQ1jBdyt/q2AnGX99nku7MqF1oJOJ8nN1lriwYcFyvjBoBkEAAG28umjwxb5Y1t29dXtJzCwsrEVERs+SNkRE5C/j++bMPTV28EmR7LviyaMFAzpT+F5yUlLp2zRQgaQfyG8RlJTcvc+IqsrOisrDn7umDg+ii/Z9GDLlMkhu7OL1lHfcmD

似乎只有具有“=”字符的 base64 字符串才能成功解密。同样,我使用相同的密码来加密和解密这两个字符串。为什么 PHP 加密函数会这样?

PS 传入的 JSON 字符串完全有效(使用 PHP json_encode() 函数生成)。

4

1 回答 1

2

经过多次调试,问题原来是我在 iOS 上使用的 base64 解码器。我最初使用的是这篇文中的 NSData+Base64 类别。这是有缺陷的。

我最终在这里使用了实现。现在一切都解密得很好。:)

于 2014-01-16T06:08:03.647 回答