c# md5+DES加密实现

    xiaoxiao2022-06-28  37

    DES加密的密钥位数要为8位字符, 网上大多数代码用任意长度密钥时都只截取8位或者补足8位, 这种方法太随意. MD5算法正好将任意长度字符串生产16位byte, 刚好DES的密钥和密钥向量总共需要16位byte. 所以此代码将密钥用MD5算法生成DES可用的密钥和密钥向量, 让DES加密支持任意长度的密钥.

    /// <summary> /// 进行md5+DES加密。 /// </summary> /// <param name="pToEncrypt">要加密的字符串。</param> /// <param name="sKey">密钥</param> /// <returns>以Base64格式返回的加密字符串。</returns> public string Encrypt(string pToEncrypt, string sKey) { byte[] key = new byte[8]; byte[] IV = new byte[8]; using (MD5 md5Hash = MD5.Create()) { byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(sKey)); for (int i = 0; i < 8; i++) { key[i] = data[i]; IV[i] = data[i + 8]; } } using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt); des.Key = key; des.IV = IV; System.IO.MemoryStream ms = new System.IO.MemoryStream(); using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); cs.Close(); } string str = Convert.ToBase64String(ms.ToArray()); ms.Close(); return str; } } /// <summary> /// 进行md5+DES解密。 /// </summary> /// <param name="pToDecrypt">要解密的以Base64</param> /// <param name="sKey">密钥</param> /// <returns>已解密的字符串。</returns> public string Decrypt(string pToDecrypt, string sKey) { byte[] key = new byte[8]; byte[] IV = new byte[8]; using (MD5 md5Hash = MD5.Create()) { byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(sKey)); for (int i = 0; i < 8; i++) { key[i] = data[i]; IV[i] = data[i + 8]; } } byte[] inputByteArray = Convert.FromBase64String(pToDecrypt); using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { des.Key = key; des.IV = IV; System.IO.MemoryStream ms = new System.IO.MemoryStream(); using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); cs.Close(); } string str = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return str; } }
    转载请注明原文地址: https://ju.6miu.com/read-1124564.html

    最新回复(0)