0
У меня есть следующий метод дешифрования, который, кажется, работает нормально, за исключением того, что он возвращает только 16 байт вместо 32, я должен слишком долго смотреть на него и не могу понять, что я сделал неправильно. Я надеюсь, что другой набор глаз поможет. Благодарю.Расшифровка возвращает 16 байт вместо 32, почему?
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)
Привет, Янн, спасибо за ввод. Я не могу установить BlockSize больше, чем он этого не позволяет, так как следует использовать декодирование более одного блока? –
@WillTartak: Это полностью зависит от используемого режима шифрования. ЕЦБ? CBC? CTR? XTR? CFB? Что вы пытаетесь сделать, что более высокий уровень (и хорошо разработанный) криптографический API не предоставляет? –