1

.net サーバーからデータを送受信するために、iOS アプリケーションに AES128 ビット暗号化/復号化を実装しています。ほぼ完了しましたが、単体テスト中に暗号化文字列に問題が発生しました。一部の暗号化文字列は、.net サーバーとは異なります。両側で 98% の文字列が正しいとしますが、問題は 2% の文字列で発生します。両側の暗号化された文字列を照合すると、iOS 側で生成された文字列が少し短く、.net 側で長い文字列であることがわかります。もう1つ、iOS文字列が.net文字列の部分文字列であることがわかりました。iOS で生成された暗号化された文字列を復号化しようとすると、null が表示されて復号化されませんが、.net サーバーで生成された暗号化された文字列 (iOS よりも大きい) を復号​​化しようとすると、復号化された文字列を使用できます。

同じキー (サーバーと iOS 側で 16 文字の長さ) を使用します。

解決策または私が間違っている場所を教えてください。

どうもありがとうございました。

元の文字列: "custId=10&mode=1" KEY= "PasswordPassword"

iOS で暗号化された文字列: r51TbJpBLYDkcPC+Ei6Rmg==

.net で暗号化された文字列: r51TbJpBLYDkcPC+Ei6RmtY2fuzv3RsHzsXt/RpFxAs=

暗号化のためのパディング = kCCOptionPKCS7Padding;

このチュートリアルに従いました。 http://automagical.rationalmind.net/2009/02/12/aes-interoperability-between-net-and-iphone/

4

2 に答える 2

1

CryptoSE で見つかった同様の質問

私のバージョン TL;DR

基本的に、.net と iOS はどちらも実装が異なります。あなたがフォローしているガイドは 2009 年のものなので、それ以降、各プラットフォームに少なくとも 1 つの主要な改訂が行われたことを考えると、かなり古くなっていると思います。

元の回答 次の回答が得られます。

すぐに次の 4 つの理由が考えられます。

  1. どちらも AES256 を使用していません。Obj-C ドキュメントには、彼らが AES256 を使用しているという直接的な記述が見られます (意図的に変更しない限り)。Visual Basic ドキュメントには、彼らが使用しているキーのサイズを示す記述は見当たりません (それが彼らのものでない限り) 「ブロック ビット」を意味します)。

  2. 別のキー。AES256 は 256 ビットの鍵を取ります。5 文字の文字列を取得して 256 ビット値に変換する標準的な方法はありません。さて、考えられる方法はたくさんあります。両方が同じものを使用しているという特別な保証はありません。

  3. さまざまな操作モード。AES ブロック暗号は 128 ビット値を取り、それを 128 ビット値に変換します。ただし、すべてのメッセージが 128 ビットに収まるわけではありません。さらに、メッセージの暗号化以外にもやりたいことがあります。操作モードは、ブロック暗号を取得し、それをツールとして使用して、より一般的に役立つ機能 (はるかに長いメッセージの暗号化など) を実行する方法です。多くの標準的な操作モードがあり、Obj-C ドキュメントでは、CBC モードを使用していると述べられています。Visual Basic ドキュメントには、CBC モードの説明が文字化けしている可能性がある恐ろしい響きの単語が含まれています。

  4. IV。一部の操作モード (CBC モードなど) では、暗号化機能が「初期化ベクトル」をランダムに選択します。これは、暗号化されたメッセージと一緒に翻訳できます (デクリプターがその値を必要とするため)。メッセージを 2 度目に暗号化する場合に、この初期化ベクトルが行うことの 1 つは、2 番目の暗号文が最初の暗号文とまったく似ていないことです。そうすれば、聞いている人は、あなたがメッセージを繰り返しただけだと推測できなくなります。Obj-C ドキュメントでは、ランダムな IV を選択すると具体的に述べられています (自分で IV を与えるように指示しない限り)。

  5. ご覧のとおり、2 つの暗号文が異なる理由はいくつかあります。試してみることができることの1つは、暗号文を一方から他方に渡し、復号化するように依頼することです。可能であれば、双方が基本的に同じことをしていると確信できます。

于 2013-03-20T09:41:00.833 に答える
1

ご覧のとおり、2 つの暗号文が異なる理由はいくつかあります。試してみることができることの1つは、暗号文を一方から他方に渡し、復号化するように依頼することです。可能であれば、双方が基本的に同じことをしていると確信できます。

于 2015-02-19T10:09:38.240 に答える