我試圖獲取此代碼進行加密和解密,但在.FlushFinalBlock()
解密過程中,我一直收到的數據長度太長。使用Rijndael數據加密和解密太長
我不知道我在做什麼錯在這裏,因爲我在這個問題上超出了我的元素。
任何人都可以告訴我我在做什麼錯嗎?加密是可以的,但它不能解密它的加密。
static byte[] u8_Salt = new byte[] { 0x26, 0x19, 0x81, 0x4E, 0xA0, 0x6D, 0x95, 0x34, 0x26, 0x75, 0x64, 0x05, 0xF6 };
public static string Encrypt(string data, string password)
{
//
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(password, u8_Salt);
//
Rijndael i_Alg = Rijndael.Create();
i_Alg.Padding = PaddingMode.None;
i_Alg.Key = pdb.GetBytes(32);
i_Alg.IV = pdb.GetBytes(16);
//
using (var cryptoProvider = new DESCryptoServiceProvider())
using (var memoryStream = new MemoryStream())
using (var cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(), CryptoStreamMode.Write))
using (var writer = new StreamWriter(cryptoStream))
{
writer.Write(data);
writer.Flush();
cryptoStream.FlushFinalBlock();
writer.Flush();
return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
}
}
public static string Decrypt(string data, string password)
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(password, u8_Salt);
//
Rijndael i_Alg = Rijndael.Create();
i_Alg.Padding = PaddingMode.None;
i_Alg.Key = pdb.GetBytes(32);
i_Alg.IV = pdb.GetBytes(16);
//
using (var cryptoProvider = new DESCryptoServiceProvider())
using (var memoryStream = new MemoryStream())
using (var cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(), CryptoStreamMode.Write))
using (var writer = new StreamWriter(cryptoStream))
{
writer.Write(data);
writer.Flush();
cryptoStream.FlushFinalBlock();
writer.Flush();
return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
}
}
夥計,這是完美的!愛這個擴展..謝謝 –