美文网首页
c#版本des MD5加密解密算法

c#版本des MD5加密解密算法

作者: 吉凶以情迁 | 来源:发表于2023-03-27 22:11 被阅读0次
    
            static Encoding encoding = Encoding.UTF8;
    
            public static string EncryptDES(string encryptString, string key)
            {
                var input = encoding.GetBytes(encryptString);
                var ouptputData = ProcessDES(input, key, true);
                var outputStr = Convert.ToBase64String(ouptputData);
    
                //base64编码中有不能作为文件名的'/'符号,这里把它替换一下,增强适用范围
                return outputStr;//.Replace('/', '@');
            }
    
            public static string DecryptDES(string decryptString, string key)
            {
             //   decryptString = decryptString.Replace('@', '/');
    
                var input = Convert.FromBase64String(decryptString);
                var data = ProcessDES(input, key, false);
                return encoding.GetString(data);
            }
    
    
            private static byte[] ProcessDES(byte[] data, string key, bool isEncrypt)
            {
                using (var dCSP = new DESCryptoServiceProvider())
                {
                    var keyData = MD5EncodeBytes(key);
                    var rgbKey = new ArraySegment<byte>(keyData, 0, 8).ToArray();
                    var rgbIV = new ArraySegment<byte>(keyData, 8, 8).ToArray();
                    var dCSPKey = isEncrypt ? dCSP.CreateEncryptor(rgbKey, rgbIV) : dCSP.CreateDecryptor(rgbKey, rgbIV);
    
                    using (var memory = new MemoryStream())
                    using (var cStream = new CryptoStream(memory, dCSPKey, CryptoStreamMode.Write))
                    {
                        cStream.Write(data, 0, data.Length);
                        cStream.FlushFinalBlock();
                        return memory.ToArray();
                    }
                }
            }
    
            /// <summary>
            /// 字符串MD5加密
            /// </summary>
            /// <param name="Text">要加密的字符串</param>
            /// <returns>密文</returns>
            public static string MD5Encode(string Text)
            {
                byte[] buffer = System.Text.Encoding.Default.GetBytes(Text);
                try
                {
                    System.Security.Cryptography.MD5CryptoServiceProvider check;
                    check = new System.Security.Cryptography.MD5CryptoServiceProvider();
                    byte[] somme = check.ComputeHash(buffer);
                    string ret = "";
                    foreach (byte a in somme)
                    {
                        if (a < 16)
                            ret += "0" + a.ToString("X");
                        else
                            ret += a.ToString("X");
                    }
                    return ret.ToLower();
                }
                catch
                {
                    throw;
                }
    
            }
            public static byte[] MD5EncodeBytes(string str)
            {
                using (var md5 = MD5.Create())
                {
                    return md5.ComputeHash(Encoding.UTF8.GetBytes(str));
                }
            }
    
    
    
            /// <summary>  
            /// C# DES加密方法   密钥和向量字符串长度必须为8.
            /// </summary>  
            /// <param name="encryptedValue">要加密的字符串</param>  
            /// <param name="key">密钥</param>  
            /// <param name="iv">向量</param>  
            /// <returns>加密后的字符串</returns>  
            public static string DESEncrypt(string originalValue, string key, string iv)
            {
                using (DESCryptoServiceProvider sa
                    = new DESCryptoServiceProvider { Key = Encoding.UTF8.GetBytes(key), IV = Encoding.UTF8.GetBytes(iv) })
                {
                    using (ICryptoTransform ct = sa.CreateEncryptor())
                    {
                        byte[] by = Encoding.UTF8.GetBytes(originalValue);
                        using (var ms = new MemoryStream())
                        {
                            using (var cs = new CryptoStream(ms, ct,
                                                             CryptoStreamMode.Write))
                            {
                                cs.Write(by, 0, by.Length);
                                cs.FlushFinalBlock();
                            }
                            return Convert.ToBase64String(ms.ToArray());
                        }
                    }
                }
            }
    
            /// <summary>  
            /// C# DES解密方法   密钥和向量字符串长度必须为8.
            /// </summary>  
            /// <param name="encryptedValue">待解密的字符串</param>  
            /// <param name="key">密钥</param>  
            /// <param name="iv">向量</param>  
            /// <returns>解密后的字符串</returns>  
            public static string DESDecrypt(string encryptedValue, string key, string iv)
            {
                using (DESCryptoServiceProvider sa =
                    new DESCryptoServiceProvider
                    { Key = Encoding.UTF8.GetBytes(key), IV = Encoding.UTF8.GetBytes(iv) })
                {
                    using (ICryptoTransform ct = sa.CreateDecryptor())
                    {
                        byte[] byt = Convert.FromBase64String(encryptedValue);
    
                        using (var ms = new MemoryStream())
                        {
                            using (var cs = new CryptoStream(ms, ct, CryptoStreamMode.Write))
                            {
                                cs.Write(byt, 0, byt.Length);
                                cs.FlushFinalBlock();
                            }
                            return Encoding.UTF8.GetString(ms.ToArray());
                        }
                    }
                }
            }
    
    

    相关文章

      网友评论

          本文标题:c#版本des MD5加密解密算法

          本文链接:https://www.haomeiwen.com/subject/pnfnhdtx.html