C# DES加密类,16位的加密。
这个加密类是与java写的DES加密不同时,自己写的,最后与Java的加密相同了,解决了加密后不同的问题。
可以直接调用里面的加密和解密的方法。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; using System.Security.Cryptography; using System.IO; namespace EallNum.Helper { public class FI_DesTools { private FI_DesTools() { } private static string key = "×××××"; /// <summary> /// 对称加密解密的密钥 /// </summary> public static string Key { get { return key; } set { key = value; } } /// <summary> /// DES加密 /// </summary> /// <param name="encryptString"></param> /// <returns></returns> public static string DesEncrypt(string strEncryptString) { StringBuilder strRetValue = new StringBuilder(); try { byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8)); byte[] keyIV = keyBytes; byte[] inputByteArray = Encoding.UTF8.GetBytes(strEncryptString); DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); provider.Mode = CipherMode.ECB;//兼容其他语言的Des加密算法 provider.Padding = PaddingMode.Zeros;//自动补0 MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, provider.CreateEncryptor(keyBytes, keyIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); //不使用base64编码 //return Convert.ToBase64String(mStream.ToArray()); //组织成16进制字符串 foreach (byte b in mStream.ToArray()) { strRetValue.AppendFormat("{0:X2}", b); } } catch (Exception e) { Console.WriteLine(e); } return strRetValue.ToString(); } /// <summary> /// DES解密 /// </summary> /// <param name="decryptString"></param> /// <returns></returns> public static string DesDecrypt(string strDecryptString) { string strRetValue = ""; try { byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8)); byte[] keyIV = keyBytes; //不使用base64解码 //byte[] inputByteArray = Convert.FromBase64String(decryptString); //16进制转换为byte字节 byte[] inputByteArray = new byte[strDecryptString.Length / 2]; for (int x = 0; x < strDecryptString.Length / 2; x++) { int i = (Convert.ToInt32(strDecryptString.Substring(x * 2, 2), 16)); inputByteArray[x] = (byte)i; } DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); provider.Mode = CipherMode.ECB;//兼容其他语言的Des加密算法 provider.Padding = PaddingMode.Zeros;//自动补0 MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, provider.CreateDecryptor(keyBytes, keyIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); //需要去掉结尾的null字符 //strRetValue = Encoding.UTF8.GetString(mStream.ToArray()); strRetValue = Encoding.UTF8.GetString(mStream.ToArray()).TrimEnd('\0'); } catch (Exception e) { Console.WriteLine(e); } return strRetValue; } } }