1

だから私はc#でAES暗号化を研究しようとしてきました。私はIVに少しこだわっていますが、暗号化を理解するのに苦労しているだけで、他の人からの説明がこの壁を乗り越えてくれることを願っています。

とにかく、暗号化されたメッセージを使用して、IVとそれをWebサービスに送信する方法(これがAESを使用する主な目的であるため)に関する何かを見つけました。

これが私が見つけた記事です

http://old.nabble.com/AES-decryption-with-different-IV-td31004365.html

そこには、メッセージを復号化する宛先に渡すときに、メッセージにIVを添付できると書かれています。

そうは言っても、私の質問は、メッセージの暗号化に使用されるIVから変換された通常の文字列に関係しているのでしょうか。または、IVをバイト単位で添付していますか?

これが私のメインの復号化です

public string DecryptString(string encryptedString, string key)
{
    if (encryptedString == null || encryptedString.Length <= 0)
        throw new ApplicationException("No string to decrypt.");

    if (key == null || key.Length <= 0)
        throw new ApplicationException("No key.");

    byte[] cipherText = Convert.FromBase64String(encryptedString);

    Rijndael aes = new RijndaelManaged();
    aes.Key = StringToByte(key);
    aes.IV = GetIV(cipherText);

    ICryptoTransform decryptor = aes.CreateDecryptor();

    throw new NotImplementedException();
}

私のGetIV()は

static public byte[] GetIV(string cipherText)
{
    // IV will be attached to the beginning of the encrypted String
    // needs the length of the IV
    int ivStringLength = 16;
    string ivString = cipherText.Substring(0, ivStringLength);
    byte[] ivByte = StringToByte(ivString);

    return ivByte;

}

今、私が読​​んだこの他のスレッドに基づいて

https://codereview.stackexchange.com/questions/13714/symmetric-encryption-decryption-routine-using-aes

暗号化されたIVからIVを取得しているようですが、最初のN文字ではなく、最初のNバイトです。それで私は混乱しました!!

また、キーを使用してメッセージを暗号化するためにIVを使用するべきではありません。前回の記事では、KEYとIVで暗号化してから、メッセージの前にIVを再度添付して、文字列に変換していますか?

編集:お詫びします。私がWebサービスを作成したのは私であり、これが私が実装しようとしている暗号化であると言うのを忘れました。

4

2 に答える 2

2

最後に、IV をどこに置くかは問題ではありません。最初のブロックを復号化するには IV が必要なため、通常は暗号文の前に保存されます。

暗号文と IV はどちらもバイトです。文字列が必要な場合は、base 64 などの特定の文字列エンコーディングを使用して変換できます。それらを個別に、または一緒にエンコードできます。

できないことは、文字列とバイト配列を混同することです。これは、IV を抽出しようとしているときに行うことです。暗号文の先頭から文字ではなく、バイトを削除する必要があります。

于 2012-12-11T07:22:43.227 に答える
1

あなたはウェブサービスを提供しているので、選択された暗号文攻撃から保護するために認証された暗号化を使用することはあなたにとって有益です.

文字列の対称認証暗号化の最新の例をリストした 2 つの c# の例があります。c# . IV を暗号文の前に保留するだけでなく、認証タグも後保留します。

于 2012-12-31T16:51:29.823 に答える