0

iOS プロジェクトで暗号化に RNCryptor を使用しています。アプリは、サーバーから送信された JSON 文字列を復号化します。サーバー上では、文字列はRNCryptor リポジトリにある 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 文字列のみが正常に復号化されるようです。繰り返しますが、同じパスワードを使用して、これら 2 つの文字列を暗号化および復号化しました。PHP の暗号化関数がこのように動作するのはなぜですか?

PS 渡された JSON 文字列は完全に有効です (PHP json_encode() 関数を使用して生成されます)。

4

1 に答える 1

2

多くのデバッグの後、問題は iOS で使用していた base64 デコーダーであることが判明しました。最初は、このブログ投稿の NSData+Base64 カテゴリを使用していました。欠陥があります。

ここで実装を使用することになりました。すべてが正常に復号化されます。:)

于 2014-01-16T06:08:03.647 に答える