Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用RijndaelManaged时出现加密异常_C#_Encryption_Aes - Fatal编程技术网

C# 使用RijndaelManaged时出现加密异常

C# 使用RijndaelManaged时出现加密异常,c#,encryption,aes,C#,Encryption,Aes,我正在尝试使用.NET中的RijndaelManaged类加密文本字符串。然而,我不断得到一个加密异常(“要解密的数据长度无效”)。这个消息并没有什么帮助,尤其是当我试图加密数据而不是解密数据时。下面是代码 public static string EncryptKMSToken(string valueToEncrypt, string encryptionKey) { string results = string.Empty; using (RijndaelManaged aes

我正在尝试使用.NET中的RijndaelManaged类加密文本字符串。然而,我不断得到一个加密异常(“要解密的数据长度无效”)。这个消息并没有什么帮助,尤其是当我试图加密数据而不是解密数据时。下面是代码

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;
}

当第三个using语句关闭时(即writer.Write(valueToEncrypt)后的一行)会发生错误。如果我尝试将第三个using块中的两行移到下面的那一行,我会得到一个空字符串(错误仍然会发生)。我直接从此站点中提取了此代码(http://stackoverflow.com/questions/273452/using-aes-encryption-in-c-sharp)但它似乎不起作用。有人有什么想法吗?

是的,但我认为如果您重新阅读代码,您也会有想法:

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

这是一个名为encryptor的解密程序…

heh,它起作用了。我知道它必须很小。我想我只需要另一双眼睛。谢谢!将UTF-8字符串直接转换为密钥很可能是个坏主意。你应该使用十六进制或base64密钥。或者如果真的有必要,使用密码和一个缓慢的散列,如PBKDF2。