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.