【发布时间】:2011-10-25 15:07:24
【问题描述】:
我试图用System.Security.Cryptography.DES加密一个字符串,但我发现每次运行程序时,加密的结果都会改变!
我不知道每次运行应用程序时如何获得相同的结果?是否有不变的键或其他任何添加来获得相同的结果?
我想在这段代码中输入“google”时
byte[] plaintextBytes = (new UnicodeEncoding()).GetBytes(expireddate);
SymmetricAlgorithm 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();
当我在下次打开应用程序时输入字节数组的结果时,从此代码中获取“google”?
MemoryStream msDecrypt = new MemoryStream(decodedlistbyte.ToArray());
CryptoStream csDecrypt = new CryptoStream(msDecrypt, sa.CreateDecryptor(), CryptoStreamMode.Read);
byte[] decryptedTextBytes = new Byte[decodedlistbyte.Count];
csDecrypt.Read(decryptedTextBytes, 0, decodedlistbyte.Count);
csDecrypt.Close();
msDecrypt.Close();
string decrypteddate = (new UnicodeEncoding()).GetString(decryptedTextBytes);
【问题讨论】:
-
您可能每次都在更换盐。 (这是正确的做法!)
-
但加密后我会在另一台电脑上解密,所以解密的结果一定是我在加密时输入的!!!
-
您必须保持安全和私密的密钥,您可以以纯文本形式保存并分享的盐。
-
顺便说一句,salt== 初始化向量。而且 Des 不是最安全的算法,最好使用三重 des 甚至更好的 Rijndael
标签: c# encryption cryptography des