J'ai la classe de chiffrement statique suivante avec des méthodes d'extension.Comment implémenter System.Security.Cryptography.DES
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);
}
}
Malheureusement, la méthode de déchiffrement jette toujours une erreur: Bad Data
La seule façon que j'ai eu l'occasion de c'est en faisant le même statique objet SymmetricAlgorithm
, mais cela ne suffit pas à travers des sessions et recycle
Ai-je raté quelque chose?
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
Vous ne devriez pas utiliser DES. Au lieu de cela, utilisez Rijndael. – SLaks
Quelle est la trace de la pile? – SLaks