读书人

C#加密资料后怎样解密

发布时间: 2012-09-02 21:00:34 作者: rapoo

C#加密文件后怎样解密

C# code
             try            {                byte[] Key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };                byte[] IV = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };                RijndaelManaged RMCrypto = new RijndaelManaged();                FileStream file = new FileStream(@"f:\a.txt",FileMode.Open);                CryptoStream crypto = new CryptoStream(file,RMCrypto.CreateEncryptor(Key, IV), CryptoStreamMode.Read);                StreamReader SReader = new StreamReader(crypto);                SReader.Close();                file.Close();            }            catch             {                Console.WriteLine("The Listener Failed.");            }


用CryptoStream和RijndaelManaged算法把txt加密成功了,打开乱码。 但是我想解密,把文件复原。都按照msdn的做了没效果,也没异常。

搞不懂

[解决办法]
那就要看文件的编码格式了。中间使用错误的编码将导致乱码,最后的结果当然也就不可能对了。

看看下面的代码,可以正常工作的:
用法:
a. 调用TestEnDencrypt.Encrypt(@"f:\a.xml") 加密获得"f:\a.xml_"文件,我测试用的xml是Unicode编码的,所以代码中用Encoding.Unicode.GetString获取的,你要对照文件更改对应的编码格式,这个是一个关键点;
b. 调用TestEnDencrypt.Dencrypt(@"f:\a.xml_")文件就可以成功得到解密后的字符串内容了。

C# code
    class TestEnDencrypt    {        static byte[] Key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };        static byte[] IV = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };        static void Encrypt(string fileName)        {            try            {                RijndaelManaged RMCrypto = new RijndaelManaged();                FileStream file = new FileStream(fileName, FileMode.Open);                byte[] data = new byte[file.Length];                file.Read(data, 0, (int)file.Length);                file.Close();                MemoryStream ms = new MemoryStream();                CryptoStream crypto = new CryptoStream(ms, RMCrypto.CreateEncryptor(Key, IV), CryptoStreamMode.Write);                using (StreamWriter sw = new StreamWriter(crypto))                {                    string text = Encoding.Unicode.GetString(data);                    sw.Write(text);                }                File.WriteAllBytes(fileName + "_", ms.ToArray());            }            catch (Exception ex)            {                Console.WriteLine(ex.Message);            }        }        static string Dencrypt(string fileName)        {            string ret = null;            try            {                RijndaelManaged RMCrypto = new RijndaelManaged();                FileStream file = new FileStream(fileName, FileMode.Open);                CryptoStream crypto = new CryptoStream(file, RMCrypto.CreateDecryptor(Key, IV), CryptoStreamMode.Read);                StreamReader SReader = new StreamReader(crypto);                ret = SReader.ReadToEnd();                SReader.Close();                file.Close();            }            catch            {                Console.WriteLine("The Listener Failed.");            }            return ret;        }    } 

读书人网 >C#

热点推荐