.net comumente usados algoritmos de criptografia e descriptografia

Criptografia MD5: (criptografia irreversível)

Método de encapsulamento: 

 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();
            }
        }

    }

Exemplos:

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

resultado:

 

recursos de criptografia md5:

1. O resultado criptografado do mesmo texto original é o mesmo

2. O comprimento do conteúdo criptografado de diferentes comprimentos é o mesmo

3. A criptografia é irreversível e o texto original não pode ser descriptografado por meio de texto cifrado

4. O texto original é muito diferente, mas o resultado criptografado é muito diferente

5. Os documentos também podem ser criptografados para gerar resumos

 

aplicativo de criptografia md5:

1. A senha de login do sistema é criptografada por md5 e o texto cifrado é armazenado no banco de dados.Quando o usuário faz o login, a senha inserida pelo usuário é criptografada com md5 e comparada com o banco de dados. (Salve a senha para evitar que você veja o texto simples)

2. O gerenciador de código-fonte, como svn, quando o arquivo for alterado, o arquivo será marcado como alterado. (À prova de adulteração)

3. Carregamento rápido em segundos, escaneie o md5 do arquivo e compare-o com o arquivo existente md5.Se a correspondência indicar que o arquivo já existe, ele não será mais carregado.

4. Assinatura digital, resuma alguns conteúdos e proteja-os por terceiros autorizados.No futuro, este documento será feito por você e não poderá ser negado.

 

 

 

Criptografia DES: (criptografia simétrica reversível)

adicione um tipo de configuração a app.config para armazenar chaves criptografadas

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

Pacote de métodos de criptografia e descriptografia:  

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());
            }
        }
    }

Exemplos:

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

resultado:

 

Recursos de criptografia DES:

1. Ele pode ser descriptografado de volta ao texto original após a criptografia, e a chave de criptografia e a chave de descriptografia são as mesmas.

2. A velocidade de criptografia e descriptografia é rápida e o problema é a segurança da chave.

 

 

Criptografia RSA: (criptografia reversível assimétrica)

Pacote de métodos de criptografia e descriptografia:  

 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);
        }

    }

Exemplos:

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:

 

Recursos de criptografia RSA:

1. Ele pode ser descriptografado de volta ao texto original após a criptografia, a chave de criptografia e a chave de descriptografia não são as mesmas.

2. A velocidade de criptografia e descriptografia não é rápida, mas a segurança é boa.

3. Criptografe publicamente a chave para garantir a transmissão segura dos dados.

4. Abra a chave de descriptografia para garantir o não repúdio de dados.

Acho que você gosta

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