這個加密類是與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; } } }