.net algoritmos de cifrado y descifrado de uso común

Cifrado MD5: (cifrado irreversible)

Método de encapsulación: 

 public class Encrypt
    {
        /// <summary>
        /// md5加密后返回密文
        /// </summary>
        /// <param name="source">要加密的明文</param>
        /// <returns></returns>
        public static string MD5Encrypt(string source)
        {
            try
            {
                MD5 md5 = MD5.Create();
                byte[] data = md5.ComputeHash(Encoding.Default.GetBytes(source));
                StringBuilder sBuilder = new StringBuilder();
                for (int i = 0; i < data.Length; i++)
                {
                    sBuilder.Append(data[i].ToString("x2"));
                }
                return sBuilder.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 获取文件的md5摘要
        /// </summary>
        /// <param name="fileName">文件名称</param>
        /// <returns>文件摘要</returns>
        public static string AbstractFile(string fileName)
        {
            using (FileStream stream = new FileStream(fileName, FileMode.Open))
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] retVal = md5.ComputeHash(stream);

                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < retVal.Length; i++)
                {
                    sb.Append(retVal[i].ToString("x2"));
                }

                return sb.ToString();
            }
        }

    }

Ejemplos:

Console.WriteLine(Encrypt.MD5Encrypt("123456"));     
Console.WriteLine(Encrypt.AbstractFile(@"C:\Users\Administrator\Desktop\test\jquery.js"));

resultado:

 

Funciones de cifrado md5:

1. El resultado cifrado del mismo texto original es el mismo

2. La longitud del contenido cifrado de diferentes longitudes es la misma

3. El cifrado es irreversible y el texto original no se puede descifrar mediante texto cifrado.

4. El texto original es muy diferente, pero el resultado cifrado es muy diferente

5. Los documentos también se pueden cifrar para generar resúmenes.

 

aplicación de cifrado md5:

1. La contraseña para iniciar sesión en el sistema está encriptada por md5 y el texto cifrado se almacena en la base de datos.Cuando el usuario inicia sesión, la contraseña ingresada por el usuario se cifra con md5 y se compara con la base de datos. (Guarde la contraseña para evitar que vea el texto sin formato)

2. El administrador de código fuente, como svn, cuando se cambia el archivo, el archivo se marcará como cambiado. (A prueba de manipulaciones)

3. Carga rápida en segundos, escanea el md5 del archivo y compáralo con el archivo existente md5 Si la coincidencia indica que el archivo ya existe, ya no se cargará.

4. Firma digital, resumir algún contenido y protegerlo por un tercero autorizado En el futuro, este documento será realizado por usted y no se puede negar.

 

 

 

Cifrado DES: (cifrado simétrico reversible)

agregue un tipo de configuración a app.config para almacenar claves cifradas

 <appSettings>
    <add key="DesKey" value="hello666"/>
 </appSettings>

Paquete de métodos de cifrado y descifrado:  

public class Encrypt
    {
        public static string DesKey = ConfigurationManager.AppSettings["DesKey"];
        private static byte[] _rgbKey = ASCIIEncoding.ASCII.GetBytes(DesKey.Substring(0, 8));
        private static byte[] _rgbIV = ASCIIEncoding.ASCII.GetBytes(DesKey.Insert(0, "w").Substring(0, 8));

        /// <summary>
        /// DES加密
        /// </summary>
        /// <param name="text">需要加密的值</param>
        /// <returns>加密后的结果</returns>
        public static string DesEncrypt(string text)
        {
            DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();
            using (MemoryStream memStream = new MemoryStream())
            {
                CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateEncryptor(_rgbKey, _rgbIV), CryptoStreamMode.Write);
                StreamWriter sWriter = new StreamWriter(crypStream);
                sWriter.Write(text);
                sWriter.Flush();
                crypStream.FlushFinalBlock();
                memStream.Flush();
                return Convert.ToBase64String(memStream.GetBuffer(), 0, (int)memStream.Length);
            }
        }


        /// <summary>
        /// DES解密
        /// </summary>
        /// <param name="encryptText">需要解密的值</param>
        /// <returns>解密后的结果</returns>
        public static string DesDecrypt(string encryptText)
        {
            DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();
            byte[] buffer = Convert.FromBase64String(encryptText);

            using (MemoryStream memStream = new MemoryStream())
            {
                CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateDecryptor(_rgbKey, _rgbIV), CryptoStreamMode.Write);
                crypStream.Write(buffer, 0, buffer.Length);
                crypStream.FlushFinalBlock();
                memStream.Flush();
                return ASCIIEncoding.UTF8.GetString(memStream.ToArray());
            }
        }
    }

Ejemplos:

string strDes = Encrypt.DesEncrypt("张三");
Console.WriteLine(strDes);
Console.WriteLine(Encrypt.DesDecrypt(strDes));

resultado:

 

Funciones de cifrado DES:

1. Se puede volver a descifrar al texto original después del cifrado, y la clave de cifrado y la clave de descifrado son las mismas.

2. La velocidad de cifrado y descifrado es rápida y el problema es la seguridad de la clave.

 

 

Cifrado RSA: (cifrado asimétrico reversible)

Paquete de métodos de cifrado y descifrado:  

 public class Encrypt
    {
        /// <summary>
        /// RSA随机生成一对密钥
        /// </summary>
        /// <returns>一对密钥值</returns>
        public static KeyValuePair<string, string> GetKeyPair()
        {
            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
            string publicKey = RSA.ToXmlString(false);
            string privateKey = RSA.ToXmlString(true);
            return new KeyValuePair<string, string>(publicKey, privateKey);
        }


        /// <summary>
        /// RSA加密(内容+加密key)
        /// </summary>
        /// <param name="content">内容</param>
        /// <param name="encryptKey">加密key</param>
        /// <returns>加密后的信息</returns>
        public static string RSAEncrypt(string content, string encryptKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(encryptKey);
            UnicodeEncoding ByteConverter = new UnicodeEncoding();
            byte[] DataToEncrypt = ByteConverter.GetBytes(content);
            byte[] resultBytes = rsa.Encrypt(DataToEncrypt, false);
            return Convert.ToBase64String(resultBytes);
        }


        /// <summary>
        /// RSA解密(内容+解密key)
        /// </summary>
        /// <param name="content">内容</param>
        /// <param name="descryptKey">解密key</param>
        /// <returns></returns>
        public static string RSADecrypt(string content, string descryptKey)
        {
            byte[] dataToDecrypt = Convert.FromBase64String(content);
            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
            RSA.FromXmlString(descryptKey);
            byte[] resultBytes = RSA.Decrypt(dataToDecrypt, false);
            UnicodeEncoding ByteConverter = new UnicodeEncoding();
            return ByteConverter.GetString(resultBytes);
        }

    }

Ejemplos:

KeyValuePair<string, string> encryptDescypt = Encrypt.GetKeyPair();
string rsaEn = Encrypt.RSAEncrypt("123456",encryptDescypt.Key);
string rsaDe = Encrypt.RSADecrypt(rsaEn, encryptDescypt.Value);
Console.WriteLine(rsaEn);
Console.WriteLine(rsaDe);

resultado:

 

Funciones de cifrado RSA:

1. Se puede volver a descifrar al texto original después del cifrado, la clave de cifrado y la clave de descifrado no son iguales.

2. La velocidad de cifrado y descifrado no es rápida, pero la seguridad es buena.

3. Cifre públicamente la clave para garantizar la transmisión segura de datos.

4. Abra la clave de descifrado para garantizar el no repudio de los datos.

Supongo que te gusta

Origin blog.csdn.net/liangmengbk/article/details/114228947
Recomendado
Clasificación