У меня есть следующий класс статического шифрования с методами расширения.
public static class Encryptor {
public static byte[] Encrypt(this object obj) {
SymmetricAlgorithm sa = DES.Create();
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, obj);
byte[] plaintextBytes = new byte[ms.Length];
plaintextBytes = ms.ToArray();
sa = DES.Create();
MemoryStream msEncrypt = new MemoryStream();
CryptoStream csEncrypt = new CryptoStream(msEncrypt, sa.CreateEncryptor(), CryptoStreamMode.Write);
csEncrypt.Write(plaintextBytes, 0, plaintextBytes.Length);
csEncrypt.Close();
byte[] encryptedTextBytes = msEncrypt.ToArray();
msEncrypt.Close();
return encryptedTextBytes;
}
public static T Decrypt<T>(this byte[] bytes) {
SymmetricAlgorithm sa = DES.Create();
MemoryStream msDecrypt = new MemoryStream(bytes);
CryptoStream csDecrypt = new CryptoStream(msDecrypt, sa.CreateDecryptor(), CryptoStreamMode.Read);
byte[] decryptedTextBytes = new Byte[bytes.Length];
csDecrypt.Read(decryptedTextBytes, 0, bytes.Length);
csDecrypt.Close();
msDecrypt.Close();
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream(decryptedTextBytes);
return (T)bf.Deserialize(ms);
}
}
К сожалению, хотя метод расшифровки всегда выдает ошибку: Bad Data
Единственный способ, которым я обошелэто также делает объект SymmetricAlgorithm
статичным, но это не помогает при разных сессиях и повторных циклах.
Я что-то упустил?
STACK TRACE
[CryptographicException: Bad Data.]
System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) +33
System.Security.Cryptography.Utils._DecryptData(SafeKeyHandle hKey, Byte[] data, Int32 ib, Int32 cb, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode PaddingMode, Boolean fDone) +0
System.Security.Cryptography.CryptoAPITransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) +313
System.Security.Cryptography.CryptoStream.Read(Byte[] buffer, Int32 offset, Int32 count) +649
LinkSubmitter.Encryptor.Decrypt(Byte[] bytes) in C:\Users\Jeremy\Documents\Visual Studio 2010\Projects\LinkSubmitter\LinkSubmitter\Encryptor.cs:102