前言
本文主要讲解一下C#常用的那些加密算法。
本文源码
本文所用源码均以为大家整理完毕,大家使用以下方式获取
需要的小伙伴,请关注微信公众号: 程序员零距离, 或者扫描下方公众号二维码,回复关键字:加密算法 , 即可获取本文所用的所有源码资源。
关注上方公众号,回复 加密算法获取
MD5加密
MD5加密是最常见的加密方式,因为MD5是不可逆的,所以很多系统的密码都是用MD5加密保存的。
虽然MD5是不可以解码的,但因为MD5加密的字符串是固定的,所以,理论上只需要建立一个庞大的数据库,把所有的字符串都加密一遍,那就可以解码所有的MD5密文了。
虽然建立一个可以解码全部MD5的数据库不太现实,但一个五六百亿数据量的数据库就可以解码绝大部分字符串了,毕竟大部分情况下,我们的密码也是有长度限制的。
实际应用中MD5有64位和32位加密之分,代码如下:
#region MD5加密 32和64
public static string GetMd532(string ConvertString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);
t2 = t2.Replace("-", "");
return t2;
}
public static string Get64Md5(string str)
{
string cl = str;
string pwd = "";
var md5 = MD5.Create();
byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
for (int i = 0; i < s.Length; i++)
{
pwd = pwd + s[i].ToString("X2");
}
return pwd;
}
#endregion
我们运行一下,加密函数。
Console.WriteLine($"MD5-64:{ MD5Helper.Get64Md5("Kiba518")}");
Console.WriteLine($"MD5-32:{ MD5Helper.Get32Md5("Kiba518")}");
结果如下图所示:
SHA1加密
SHA1加密算法与MD5加密类似,都是不可逆的,只是算法不同。所以也和MD5一样,存在容易被大数据解码的问题。
代码如下:
private static readonly Encoding Encoder = Encoding.UTF8;
public static String Sha1(String content )
{
try
{
SHA1 sha1 = new SHA1CryptoServiceProvider();//创建SHA1对象
byte[] bytes_in = Encoder.GetBytes(content);//将待加密字符串转为byte类型
byte[] bytes_out = sha1.ComputeHash(bytes_in);//Hash运算
sha1.Dispose();//释放当前实例使用的所有资源
String result = BitConverter.ToString(bytes_out);//将运算结果转为string类型
result = result.Replace("-", "").ToUpper();
return result;
}
catch (Exception ex)
{
return ex.Message;
}
}
运行加密函数,结果如下图所示:
Base64加密
准确的来说,Base64是一种编码,而不是加密,通常Base64编码后字符串会用于传输数据。不过也因为Base64编码后字符串具有不可读性,所以,不少人也把他当做加密算法来使用。
代码如下:
private static readonly Encoding Encoder = Encoding.UTF8;
public static string EncodeBase64(string source)
{
string target = "";
byte[] bytes = Encoder.GetBytes(source);
try
{
target = Convert.ToBase64String(bytes);
}
catch
{
target = source;
}
return target;
}
public static string DecodeBase64(string result)
{
string decode = "";
byte[] bytes = Convert.FromBase64String(result);
try
{
decode = Encoder.GetString(bytes);
}
catch
{
decode = result;
}
return decode;
}
运行Base64编码函数。
string base64Str = Base64Helper.EncodeBase64("Kiba518");
Console.WriteLine($"SHA1编码:{ base64Str}");
Console.WriteLine($"SHA1解码:{ Base64Helper.DecodeBase64(base64Str)}");
结果如下图所示:
Des加密
DES加密算法是对密钥进行保密,而公开算法,即只有拥有相同密钥的人才能解密。
DES加密算法对密钥有要求,必须是8个字符,如abcdefgh这样的。
代码如下:
public static string Encrypt(string stringToEncrypt, string shortKey)
{
DESCryptoServiceProvider des =" |