C#中的那些常用加密算法

论坛 期权论坛 脚本     
niminba   2021-5-23 02:57   2954   0

前言

本文主要讲解一下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 ="
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP