2

文字列を復号化しようとしていますが、

指定された初期化ベクトル(IV)が、このアルゴリズムのブロックサイズと一致しません。

私はしばらくの間SOとWebを検索していて、IVが32バイトで、16バイトである必要があることを理解していますが、それを実現する方法がわかりません。取得する文字列はAES/CBC / PKCS5Paddingを使用して暗号化されており、私のコード(実際にはWebのどこかで見つけました)は

var btKey = Encoding.ASCII.GetBytes("7c6e1257d0e81ff55bda80cc904365ae");
var btIV = Encoding.ASCII.GetBytes("cf5e4620455cd7190fcb53ede874f1a8");

aesAlg.Key = btKey;
aesAlg.IV = btIV;

aesAlg.Padding = PaddingMode.PKCS7;

// Create a decrytor to perform the stream transform.
var decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

// Create the streams used for decryption.
using (MemoryStream msDecrypt = new MemoryStream(encodedTicketAsBytes))
  {
    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)){
      using (StreamReader srDecrypt = new StreamReader(csDecrypt))
      {
        // Read the decrypted bytes from the decrypting stream
        // and place them in a string.
        plainText = srDecrypt.ReadToEnd();
      }
    }
  }

私が理解していないのは、aesAlg.Paddingの使用です。正直なところ、C#でのこの例を理解するには、まだ簡単なものを見つけることができませんでした。

何か助けはありますか?、

ありがとう!!

4

1 に答える 1

5

あなたが持っている鍵は、ほぼ確実に、ASCII文字ではなく16進値の束です。あなたがやっている:

var btIV = Encoding.ASCII.GetBytes("cf5e4620455cd7190fcb53ede874f1a8");

これは他の文字列と同じように扱い、バイナリASCIIバイトに変換します。それらは私には16進数のように見えます。2文字ごとが1バイトの値です。あなたはおそらく次のようなものが欲しいでしょう

var btIV = new byte[] {0xcf,0x5e,0x46,0x20,0x45,0x5c,0xd7,0x19,0x0f,0xcb,0x53,0xed,0xe8,0x74,0xf1,0xa8};
于 2012-05-29T14:13:15.137 に答える