1

crypto++ を使用して http リクエストを暗号化し、アプリ エンジン サーバー側で pycrypto を使用して復号化しようとしています。Arc4 暗号化を使用して、iPhone 側で正常に暗号化および復号化できますが、アプリ エンジンで復号化しようとすると、結果が文字化けします。クライアントで暗号化した後の暗号文は、ログを確認したときにサーバーで受信したテキストと同じなので、視覚的に同じである場合、なぜ復号化に失敗するのでしょうか?

NSStringのエンコーディングと関係があるのではないかと思いました.asciiで暗号をエンコードしようとしてdecrypt()が失敗するのを避けるために、復号化する前にサーバー側の暗号でencode()を呼び出す必要があることがわかりました. これについて少し掘り下げた別の投稿があります。誰でもアドバイスを提供できますか?

crypto++ / Google App Engine を使用した pycrypto

更新: C で Crypto++ を使用して暗号化した結果の暗号文は、Python で PyCrypto を使用して暗号化した結果の暗号文と同じではないことを発見しました。キーの初期化で何か間違っている可能性がありますか? 私は次のようなことをします:

    ARC4::Encryption enc("a");

C.そしてPythonで私は:

testobj=ARC4.new('a')

% エンコードされた結果の暗号は、C と Python では異なります。C では、キー長の 2 番目のパラメーターを渡すことができることに気付きました。これは、「a」の場合は 1 であると推測され、パラメーターを指定しない場合とは異なる暗号になります。ただし、% でエンコードされた結果は、依然として python エンコーディングとは異なります。

おそらく私の初期化に何か問題があるように見えますか?

4

1 に答える 1

0

問題はどちらの crypto impl の init でもなく、暗号化された暗号テキストを誤って NSString に詰め込もうとしたことが原因であることがわかりました。秘訣は、データを読み取り可能になるように base64 または base16 でエンコードし、復号化する前にサーバー側で unhexlify を使用することでした。

于 2010-05-12T03:32:27.843 に答える