2

.NETのRijndaelManagedクラスを使用してテキストの文字列を暗号化しようとしています。ただし、CryptographicExceptionが発生し続けます(「復号化するデータの長さが無効です」)。このメッセージは、特にデータを復号化するのではなく暗号化しようとしたときに発生するため、正確には役立ちません。以下はコードです。

public static string EncryptKMSToken(string valueToEncrypt, string encryptionKey)
{
  string results = string.Empty;

  using (RijndaelManaged aes = new RijndaelManaged())
  {
    aes.BlockSize = 128;
    aes.KeySize = 128;
    aes.Padding = PaddingMode.PKCS7;
    aes.Mode = CipherMode.CBC;

    UTF8Encoding byteTransform = new UTF8Encoding();
    aes.Key = byteTransform.GetBytes(encryptionKey);
    ICryptoTransform encryptor = aes.CreateDecryptor(aes.Key, aes.IV);

    using (MemoryStream stream = new MemoryStream())
    {
      using (CryptoStream encryptStream = new CryptoStream(stream, encryptor, CryptoStreamMode.Write))
      {
        using (StreamWriter writer = new StreamWriter(encryptStream))
        {
          writer.Write(valueToEncrypt);
        }

        byte[] encryptedBytes = stream.ToArray();
        results = byteTransform.GetString(encryptedBytes);
      }
    }
  }

  return results;
}

エラーは、3番目のusingステートメントが閉じたときに発生します(つまり、writer.Write(valueToEncrypt)の後の行。3番目のusingブロック内でその下の2行を移動しようとすると、空の文字列になります(エラーは引き続き発生します) )このコードをこのサイト(http://stackoverflow.com/questions/273452/using-aes-encryption-in-c-sharp)から直接引き出しましたが、機能していないようです。誰かアイデアはありますか? ?

4

1 に答える 1

3

はい。ただし、コードを読み直せば、あなたもそうなると思います。

ICryptoTransform encryptor = aes.CreateDecryptor(aes.Key, aes.IV);

これは、暗号化機能と呼ばれる復号化機能です...

于 2012-10-22T20:19:57.563 に答える