/// <summary>/// 加密 /// </summary> /// <param name="SourceText">需要加密的原字符串</param> /// <param name="key">秘钥</param> /// <returns></returns> public string Encrypt_UTF8(string SourceText,string key) { //实现一个加密服务的类的对象,这个类提供了DES加密算法 DESCryptoServicePRovider desProvider = new DESCryptoServiceProvider(); //因为加密内容有可能包含汉字,所以用UTF8格式,将加密的字符串保存在字节数组里 byte[] inputBytesArray = Encoding.UTF8.GetBytes(SourceText); //设置算法的秘钥和初始化向量,需要转换为ASCII码的二进制数据 desProvider.Key = Encoding.ASCII.GetBytes(key); desProvider.IV = Encoding.ASCII.GetBytes(key); //实现一个内存流写入加密后的数据 MemoryStream memoryStream = new MemoryStream(); //实现一个加密转换流,其中包含要将加密后的内容写入的内存流对象,用DESCrytoServiceProvider创建的加密器,模式为写入数据 CryptoStream cryptoStream = new CryptoStream(memoryStream, desProvider.CreateEncryptor(), CryptoStreamMode.Write); //将需要加密的字符串通过加密流写入到内存流中 cryptoStream.Write(inputBytesArray, 0, inputBytesArray.Length); //更新内存流存储块,然后清除缓存 cryptoStream.FlushFinalBlock(); //用来将加密后的数据填充为一个字符串返回 StringBuilder builder = new StringBuilder(); byte[] byteArray = memoryStream.ToArray(); for (int i = 0; i < byteArray.Length; i++) { //builder.Append(byteArray[i]); builder.AppendFormat("{0:X2}", byteArray[i]); } return builder.ToString(); }解密方法
/// <summary> /// 解密 /// </summary> /// <param name="DecryptText">需要解密的字符串</param> /// <param name="sKey">秘钥</param> /// <returns></returns> public string DesDecrypt(string DecryptText, string sKey) { //实现一个加密服务的类的对象,这个类提供了DES加密算法 DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //实现一个二进制数组保存将需要解密的字符转换为二进制后的数据,因为加密后的数据用16位字符保存,所以定义的大小为源字符串一半 byte[] inputByteArray = new byte[DecryptText.Length / 2]; //将解密内容转换为32位整数,然后存储在二进制数组里 for (int x = 0; x < DecryptText.Length / 2; x++) { int i = (Convert.ToInt32(DecryptText.Substring(x * 2, 2), 16)); inputByteArray[x] = (byte)i; } //设置秘钥和初始化向量 des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); //用来存储解密内容的内存流 MemoryStream ms = new MemoryStream(); //加密转换流 CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); //转换后写入数据 cs.Write(inputByteArray, 0, inputByteArray.Length); //更新存储,清理缓存 cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder(); return System.Text.Encoding.UTF8.GetString(ms.ToArray()); }
新闻热点
疑难解答