首页 > 代码库 > 3DES 加解密,对长度不限制
3DES 加解密,对长度不限制
#region 3DES /// <summary> /// 3DES加密 /// </summary> /// <param name="strString">需加密的字符串</param> /// <param name="strKey">密匙</param> /// <returns></returns> public static string DES3Encrypt(string strString, string strKey) { strString = strString + "".PadLeft(8); byte[] bMsg = Encoding.GetEncoding("GBK").GetBytes(strString); int l = (bMsg.Length / 16 + 1) * 16; byte[] btMsg = new byte[l]; Array.Copy(bMsg, btMsg, bMsg.Length); byte[] digestOfPassword = Encoding.Default.GetBytes(strKey); byte[] keyBytes = new byte[24]; Array.Copy(digestOfPassword, keyBytes, digestOfPassword.Length); for (int j = 0, k = 16; j < 8; ) { keyBytes[k++] = keyBytes[j++]; } TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider(); DES.Mode = CipherMode.ECB; ICryptoTransform DESEncrypt = DES.CreateEncryptor(keyBytes, keyBytes); var dd = DESEncrypt.TransformFinalBlock(btMsg, 0, btMsg.Length); return byte2hex(dd).ToString().Substring(0, (bMsg.Length / 8 + 1) * 16); } public static String getAdd(int length, String strKey) { byte[] btMsg = new byte[length / 2]; byte[] digestOfPassword = Encoding.UTF8.GetBytes(strKey); //byte[] digestOfPassword = Encoding.Default.GetBytes(strKey); byte[] keyBytes = new byte[24]; Array.Copy(digestOfPassword, keyBytes, digestOfPassword.Length); for (int j = 0, k = 16; j < 8; ) { keyBytes[k++] = keyBytes[j++]; } TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider(); DES.Mode = CipherMode.ECB; ICryptoTransform DESEncrypt = DES.CreateEncryptor(keyBytes, keyBytes); var dd = DESEncrypt.TransformFinalBlock(btMsg, 0, btMsg.Length); String rtn = byte2hex(dd); return rtn.Substring(length); } /// <summary> /// 字节数组转16进制字符串 /// </summary> /// <param name="bytes"></param> /// <returns></returns> private static string byte2hex(byte[] dd) { StringBuilder ret = new StringBuilder(); foreach (var item in dd) { ret.AppendFormat("{0:X2}", item); } return ret.ToString(); } /// <summary> /// 字符串转16进制字节数组 /// </summary> /// <param name="hexString"></param> /// <returns></returns> private static byte[] strToToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Length % 2) != 0) hexString += " "; byte[] returnBytes = new byte[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); return returnBytes; } /// <summary> /// 3DES解密 /// </summary> /// <param name="strString">需解密的字符串</param> /// <param name="strKey">密匙</param> /// <returns></returns> public static string DES3Decrypt(string strString, string strKey) { strString += getAdd(strString.Length, strKey); byte[] digestOfPassword = Encoding.Default.GetBytes(strKey); byte[] keyBytes = new byte[24]; Array.Copy(digestOfPassword, keyBytes, digestOfPassword.Length); for (int j = 0, k = 16; j < 8; ) { keyBytes[k++] = keyBytes[j++]; } TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider(); DES.Mode = CipherMode.ECB; ICryptoTransform DESDecrypt = DES.CreateDecryptor(keyBytes, keyBytes); string result = ""; try { byte[] Buffer = strToToHexByte(strString); byte[] bb = DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length); result = Encoding.GetEncoding("GBK").GetString(bb); } catch (Exception e) { throw e; } return result; } #endregion
3DES 加解密,对长度不限制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。