問題タブ [initialization-vector]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 暗号化初期化ベクトル
aes_cfb_encrypt
と関数を使用しaes_cfb_decrypt
て、次の質問があります。
- 暗号化におけるunsigned char *iv (Initialization Vector) とは。
- 復号化のために*ivを保持する必要がありますか。
- データのブロックを暗号化するたびに*ivが変更されます。この変更された*ivと何をしなければなりませんか。
約 100 MB の大きなファイルを暗号化し、ランダムな*ivを初めて渡します。ループの残りの部分で同じ*ivを使用する必要がありますか、それとも最後の呼び出しから更新された*ivを使用する必要がありますか?暗号化ブロックの。
最後に、私は構造化ファイルを扱っているので、バッファの長さとしてSizeof(struct)を使用する必要がありましたか、それとも暗号化または復号化のバッファの長さとしてsizeof(struct)*8を使用する必要がありましたか? ご指導ください..
AES_RETURN aes_cfb_encrypt(const unsigned char *ibuf, unsigned char *obuf, int len, unsigned char *iv, aes_encrypt_ctx cx[1]);
encryption - 暗号化の初期化ベクトルに失敗しました
奇妙な問題に直面しています。cfb モードで aes 暗号化を使用しています。順調に進んでいます。固定 IV で暗号化をテストしました。しかし、ランダム IV を使用すると問題が発生します。詳しくいきます。
上記のコードのサンプル出力は 8229343736510872 です。
この関数を暗号化フェーズで使用すると問題ありませんが、同じキーを使用してファイルを復号化すると、出力がガベージになります。しかし、暗号化フェーズでこのキーをハードコーディングすると、復号化が正常に行われます。
私が欠けているもの。私は単純な乱数ジェネレーターを使用しています。
openssl - openssl - キーと IV を使用して base64 文字列を復号化する
openssl で aes256 で暗号化された base64 文字列を復号化しようとしています。私の鍵で暗号化されたセッション鍵と IV が与えられました。次の openssl コマンドを使用できるように、それらを 16 進数に変換しました。
IV が非 16 進数値であるというエラーが表示されます。私は自分の鍵で暗号化された base64 の IV とセッション鍵から始めました。だから私は次のことをしました:
// base64 をバイナリに変換
// 秘密鍵を使用して復号化する
//次の C コードを使用して 16 進数に変換します。
含む
// 16 進数の IV とキーを使用してメッセージを復号化します
最後のステップで、IV が非 16 進数であるというエラーが表示されます。何か案は?
database - 一意の初期化ベクトルを使用して暗号化されたフィールドを検索する方法は?
各レコードを暗号化するために一意の初期化ベクトルを使用することをお勧めしますが、そのフィールドを検索するにはどうすればよいですか?
現在、私は単一の IV を使用しています。つまり、暗号化された検索文字列を再構築して、たとえば電子メール アドレスを検索し、データベース内のそのフィールドをクエリできます。一意の初期化ベクトルを使い始めると、暗号化された検索文字列を再構築できなくなります。
私の環境は、ASP.NET、Entity Framework、SQL Server です。おそらく、これはデータベースで直接行う方が簡単ですが、私のクエリは LINQ-to-Entities を経由しています。
[私の最初の質問 - 最終的に SO で答えが見つかりません!]
cryptography - AES カウンター モード - 暗号化ライブラリは初期化ベクトルをハードコーディングしています
職場の私の部門は、別の部門によって作成された暗号化ライブラリを使用する権限によって要求されています。問題は、暗号化ライブラリが AES カウンター モードの初期化ベクトル (すべてゼロ) をハードコーディングしていることです。(基本的に、他の部門は Bouncycastle ライブラリを取得し、独自の壊れたコードをラップしました。) 私たちはこのコードの問題を文書化しました。 .
一意の IV を平文の先頭に追加し、復号化後に平文の最初の 16 バイトを切り捨てることで、適切な初期化ベクトルを偽造できるかどうか疑問に思っています。
これは私には問題ないように思えますが、私は暗号化の専門家ではありません
java - 暗号化されたバイト配列に IV を最終ブロックとして追加する
暗号化されたデータを保持するために使用されるバイト配列の最後のブロックとして、データの暗号化に使用される 16 ビット IV を追加しようとしています。暗号化/復号化の呼び出しごとに完全にランダムな IV を使用できるように、明らかに復号化の部分でこれを行いたいと考えています。テスト目的で次のものがあります。
暗号化の手順のリストは次のとおりです。
- 作成 IV
- データを暗号化する
- 暗号化されたデータのバイト配列の末尾に IV を追加
- 16 進数を使用してバイト配列をエンコードする
復号化の手順のリストは次のとおりです。
- 16進数をデコード
- 暗号化されたデータと IV をバイト配列から切り離す
- IV を使用してデータを復号化する
私が持っているものはうまくいきますが、知りたいのは、これを行う「より良い」方法はありますか? つまり、Cipher*
型を使用してこれを行うためのセットまたはより簡単な方法はありますか? 私はそれらを見つけることができません。
ありがとう。
java - Java AES 暗号化 - クライアントとサーバー間の初期化ベクトルの送信
メッセージが暗号化され、復号化のためのベクトルとともにサーバーに送信されるクライアント側で初期化ベクトルを生成しています。
クライアントコード:
サーバーコード
次の例外が発生します。
たとえば、バッファに 1024 バイトを割り当てると、32 サイズの byte[] がサーバーに送信されますが、サーバーでは 1024 サイズの byte[] が生成されるようです。
私は正しい道を進んでいますか?