我想要对一个.txt文档进行 对称加密,用了 System.Secr...,但是,问什么我对加密后的文档用同样的 密钥 却解出来的仍是乱码呢?
我有成功的程序,需要的话电子邮件联系
一定要确保是相同的密钥,否则肯定是乱码
最近研究过.net的加密与解密,包括散列算法SHA-1,MD5
对称加密des,tripledes,和不对称加密RSA,DSA,参考System.Security命名空间
参考下面这个例子:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class FileEncrypt {
public static Byte[] ConvertStringToByteArray(String s)
{
return (new UnicodeEncoding()).GetBytes(s);
}
public static void Main()
{
//创建文件流
FileStream fs = new FileStream("EncryptedFile.txt",FileMode.Create,FileAccess.Write);
Console.WriteLine("输入一些要存储在加密文件中的文本::");
String strinput = Console.ReadLine();
Byte[] bytearrayinput=ConvertStringToByteArray(strinput);
//具有随机密钥的 DES 实例
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//从此实例创建 DES 加密器
ICryptoTransform desencrypt = des.CreateEncryptor();
//创建使用 des 加密转换文件流的加密流
CryptoStream cryptostream = new CryptoStream(fs,desencrypt,CryptoStreamMode.Write);
//写出 DES 加密文件
cryptostream.Write(bytearrayinput,0,bytearrayinput.Length);
cryptostream.Close();
//创建文件流以读回加密文件
FileStream fsread = new FileStream("EncryptedFile.txt",FileMode.Open,FileAccess.Read);
//从此 des 实例创建 DES 解密器
ICryptoTransform desdecrypt = des.CreateDecryptor();
//创建加密流集合以便对传入的字节进行读取并执行 des 解密转换
CryptoStream cryptostreamDecr = new CryptoStream(fsread,desdecrypt,CryptoStreamMode.Read);
//输出已解密文件的内容
Console.WriteLine( (new StreamReader(cryptostreamDecr, new UnicodeEncoding())).ReadToEnd() );
Console.WriteLine ();
Console.WriteLine ("按 Enter 键继续...");
Console.ReadLine();
}
}
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q307/0/10.asp&NoWebContent=1
这可能有几个问题:
1.加密和解密用的算法的属性(如Padding、Mode等)不一样;
2.中文编码。
如果上面的问题都不是,请将相关的代码给出,如果不能从根本上解决问题,问题就不算解决了。
Mark
可参考《C#数据安全手册》
我頂
见
http://forum.lostinet.com/ic.Aspx?icID=3226192&_lastreply=
上的
TDESEncrypt
TDESDecrypt