C# 解密返回16字节而不是32字节,为什么?
我有下面的解密方法,似乎工作得很好,除了它只返回16个字节,而不是32个字节。我应该已经盯着它太久了,无法找出我做错了什么。我希望换一双眼睛会有帮助。谢谢C# 解密返回16字节而不是32字节,为什么?,c#,aes,encryption,C#,Aes,Encryption,我有下面的解密方法,似乎工作得很好,除了它只返回16个字节,而不是32个字节。我应该已经盯着它太久了,无法找出我做错了什么。我希望换一双眼睛会有帮助。谢谢 private string Decrypt(string dataToDecrypt, string password, string salt) { //Generate a Key based on a Password, Salt and HMACSHA1 pseudo-random number genera
private string Decrypt(string dataToDecrypt, string password, string salt)
{
//Generate a Key based on a Password, Salt and HMACSHA1 pseudo-random number generator
Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(salt));
//Create AES algorithm with 256 bit key and 128-bit block size
using (var aes = new AesManaged())
{
// These two values are hard coded in Silverlight
//aes.Mode = CipherMode.CBC;
//aes.Padding = PaddingMode.PKCS7;
aes.Key = rfc2898.GetBytes(aes.KeySize / 8);
aes.IV = rfc2898.GetBytes(aes.BlockSize / 8);
//Create Memory and Crypto Streams
using (var memoryStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Write))
{
//Decrypt Data
byte[] data = Convert.FromBase64String(dataToDecrypt);
cryptoStream.Write(data, 0, data.Length);
// cryptoStream.FlushFinalBlock();
//Return Decrypted String
byte[] decryptBytes = memoryStream.ToArray();
string decrypted = Encoding.UTF8.GetString(decryptBytes, 0, decryptBytes.Length);
return decrypted;
} // using (cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Write))
} // using (memoryStream = new MemoryStream())
} // using (aes = new AesManaged())
} // string Decrypt(string dataToDecrypt, string password, string salt)
您的块大小是128位。如果您只解码一个块,将得到16个字节。你好,Yann,谢谢您的输入。我不能将BlockSize设置得更大,因为它不允许这样做,所以它应该如何去解码多个块呢?@WillTartak:这完全取决于所使用的密码模式。欧洲央行?CBC?CTR?XTR?循环流化床?您试图实现的是更高级别(设计良好)的加密API所不提供的什么?