采用16位密钥形式加密,把数据 dataset或文本转换为二进制流,然后进行加密解密。代码如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.IO; usingSystem.Linq; usingSystem.Security.Cryptography; usingSystem.Text; usingSystem.Threading.Tasks; namespaceCryptoHelperLib { public classCryptoHelper { //对称加密算法提供器 private ICryptoTransform encryptor; //加密器对象 private ICryptoTransform decryptor; //解密器对象 //public string key = "ABCDEFGHIJKLMNOP";//长度16 //public static byte[] DESKey = new byte[] { 11, 23, 93, 102, 72, 41, 18, 12 }; //public static byte[] DESIV = new byte[] { 75, 158, 46, 97, 78, 57, 17, 36 }; private const int BufferSize = 1024; public CryptoHelper(string algorithmName, stringkey) { SymmetricAlgorithm provider =SymmetricAlgorithm.Create(algorithmName); provider.Key =Encoding.UTF8.GetBytes(key); provider.IV = new byte[] { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF}; encryptor =provider.CreateEncryptor(); decryptor =provider.CreateDecryptor(); } public CryptoHelper(string key) : this("TripleDES", key) { } publicMemoryStream EncryptMemoryStream(MemoryStream itemStream) { //创建空的密文流 MemoryStream encryptedStream = newMemoryStream(); CryptoStream cryptoStream = newCryptoStream(encryptedStream, encryptor, CryptoStreamMode.Write); //将明文流写入到buffer中 //将buffer中的数据写入到cryptoStream中 int bytesRead = 0; byte[] buffer = new byte[BufferSize]; itemStream.Position = 0; do{ bytesRead = itemStream.Read(buffer, 0, BufferSize); cryptoStream.Write(buffer, 0, bytesRead); } while (bytesRead > 0); cryptoStream.FlushFinalBlock(); byte[] buffer2 =encryptedStream.ToArray(); string encryptedText =Convert.ToBase64String(buffer2); returnencryptedStream; } public Stream EncryptByte(byte[] data) { MemoryStream clearStream = newMemoryStream(data); clearStream.Position = 0; //创建空的密文流 MemoryStream encryptedStream = newMemoryStream(); CryptoStream cryptoStream = newCryptoStream(encryptedStream, encryptor, CryptoStreamMode.Write); //将明文流写入到buffer中 //将buffer中的数据写入到cryptoStream中 int bytesRead = 0; byte[] buffer = new byte[BufferSize]; do{ bytesRead = clearStream.Read(buffer, 0, BufferSize); cryptoStream.Write(buffer, 0, bytesRead); } while (bytesRead > 0); cryptoStream.FlushFinalBlock(); //获取加密后的文本 byte[] buffer2 =encryptedStream.ToArray(); string encryptedText =Convert.ToBase64String(buffer2); returnencryptedStream; } //加密算法 public string EncryptText(stringclearText) { //创建明文流 byte[] clearBuffer =Encoding.UTF8.GetBytes(clearText); MemoryStream clearStream = newMemoryStream(clearBuffer); //创建空的密文流 MemoryStream encryptedStream = newMemoryStream(); CryptoStream cryptoStream = newCryptoStream(encryptedStream, encryptor, CryptoStreamMode.Write); //将明文流写入到buffer中 //将buffer中的数据写入到cryptoStream中 int bytesRead = 0; byte[] buffer = new byte[BufferSize]; do{ bytesRead = clearStream.Read(buffer, 0, BufferSize); cryptoStream.Write(buffer, 0, bytesRead); } while (bytesRead > 0); cryptoStream.FlushFinalBlock(); //获取加密后的文本 buffer =encryptedStream.ToArray(); string encryptedText =Convert.ToBase64String(buffer); returnencryptedText; } publicMemoryStream DecryptMemoryStream(MemoryStream encryptedStream) { MemoryStream clearStream = newMemoryStream(); CryptoStream cryptoStream = newCryptoStream(encryptedStream, decryptor, CryptoStreamMode.Read); int bytesRead = 0; byte[] buffer = new byte[BufferSize]; do{ bytesRead = cryptoStream.Read(buffer, 0, BufferSize); clearStream.Write(buffer, 0, bytesRead); } while (bytesRead > 0); buffer =clearStream.GetBuffer(); MemoryStream clearStreamResult = newMemoryStream(buffer); returnclearStreamResult; } // //解密算法, http://www.51testing.com/html/67/n-220867-4.html //解密算法 public string DecryptText(stringencryptedText) { byte[] encryptedBuffer =Convert.FromBase64String(encryptedText); Stream encryptedStream = newMemoryStream(encryptedBuffer); MemoryStream clearStream = newMemoryStream(); CryptoStream cryptoStream = newCryptoStream(encryptedStream, decryptor, CryptoStreamMode.Read); int bytesRead = 0; byte[] buffer = new byte[BufferSize]; do{ bytesRead = cryptoStream.Read(buffer, 0, BufferSize); clearStream.Write(buffer, 0, bytesRead); } while (bytesRead > 0); buffer =clearStream.GetBuffer(); string clearText =Encoding.UTF8.GetString(buffer, 0, (int)clearStream.Length); returnclearText; } public static string Encrypt(string clearText, stringkey) { CryptoHelper helper = newCryptoHelper(key); returnhelper.EncryptText(clearText); } public static string Decrypt(string encryptedText, stringkey) { CryptoHelper helper = newCryptoHelper(key); returnhelper.DecryptText(encryptedText); } } }
调用示例:
//string key="ABCDEFGHIJKLMNOP"; //16位字符串 public byte[] DataSetToBytes(DataSet ds) { DESCryptoServiceProvider objDES = newDESCryptoServiceProvider(); MemoryStream dataStream = newMemoryStream(); MemoryStream dataStream2 = newMemoryStream(); ds.WriteXml(dataStream, XmlWriteMode.WriteSchema); CryptoHelperLib.CryptoHelper cryhelper = newCryptoHelperLib.CryptoHelper(key); dataStream2=cryhelper.EncryptMemoryStream(dataStream); byte[] buf =dataStream2.ToArray(); returnbuf; } public DataSet DataSetFromBytes(byte[] buf) { MemoryStream dataStream = newMemoryStream(buf); MemoryStream dataStream2 = newMemoryStream(); CryptoHelperLib.CryptoHelper cryhelper = newCryptoHelperLib.CryptoHelper(key); dataStream2 =cryhelper.DecryptMemoryStream(dataStream); dataStream2.Position = 0; DataSet ds = newDataSet(); ds.ReadXml(dataStream2); returnds; }