• .NET 中的MD5及hash加密以及密文输出(C#)


    背景: ASP.NET的用户验证方法,及加密处理

    在网上搜罗了一下,搜到很多雷同文章,摘引如下:

    public static string MD5(string Sourcein)
      {   
       MD5CryptoServiceProvider MD5CSP = new MD5CryptoServiceProvider();
       byte[] MD5Source = System.Text.Encoding.UTF8.GetBytes(Sourcein);
       byte[] MD5Out = MD5CSP.ComputeHash(MD5Source);
       return Convert.ToBase64String(MD5Out);
      }
    

    而如此做的话,Convert.ToBase64String出来的会是一串包含字母数字以及符合的字符串,例如:afw1fw3j=-

    这样是与储存在数据库中的加密后字符串不相同的,自然无法比较。数据库中储存的是类似BABA327D241746EE0829E7E88117D4D5这样的字符串。

    Google许久,未曾找到在ASP.NET中是怎么实现上述样子的输出的。于是自己动手,查阅MSDN,无数次实践,终于找到方法,就是用.NET中的BitConverter类,废话不多说,把代码贴出来,

    private void btnMd5_Click( object sender, EventArgs e ) {
    if (string.IsNullOrEmpty(txtSrc.Text)) {
    txtSrc.Text
    = "Please Input your string to Encrype";
    return;
    }
    MD5CryptoServiceProvider md5Encrypter
    = new MD5CryptoServiceProvider();
    byte[] theSrc = Encoding.UTF8.GetBytes( txtSrc.Text );
    byte[] theResBytes = md5Encrypter.ComputeHash( theSrc );
    txtResult.Text = BitConverter.ToString( theResBytes ).Replace( "-", "" );

    }

    private void btnHash_Click( object sender, EventArgs e ) {
    if (string.IsNullOrEmpty( txtSrc.Text )) {
    txtSrc.Text
    = "Please Input your string to Encrype";
    return;
    }
    HashAlgorithm hashEncrypter
    = new SHA1Managed();
    byte[] theSrc = Encoding.UTF8.GetBytes( txtSrc.Text );
    byte[] theResBytes = hashEncrypter.ComputeHash( theSrc );
    txtResult.Text = BitConverter.ToString( theResBytes ).Replace( "-", "" );

    }

    BitConverter.ToString出来的是类似BA-BA-32-7D-24-17-46-EE这样结果,鼠标放到BitConverter.ToString上发现它的summary:Converts the numeric value of each element of a specified array of bytes to its equivalent hexadecimal string representation.

    把string中的‘-’分离出来的方法应该是有很多种,鄙人试验过之后感觉上述方法比较简单,至于执行效率没有比较O(∩_∩)O

    需要此工具的可以下载收藏之:MD5及hash加密工具 (右键另存为)

     由此可见,汉字也是可以加密的,没有乱码。

     耐心看到最后的有福啦,其实在System.Web.Security.FormsAuthentication 中有一个专门用于加密密码的方法,它就是HashPasswordForStoringInConfigFile   此法需要两个参数,自己MSDN吧,遗憾的是此法只实现了MD5和SHA1两种加密方法。

    在此推荐一个在线加密工具,此站有很多比较实用的工具。http://www.aspnetresources.com/tools/pwdhash.aspx

    如有问题,请看家不吝赐教~

     

    附,刚刚看了一下 HashPasswordForStoringInConfigFile的内部实现,把代码贴上来了~

    代码
    public static string HashPasswordForStoringInConfigFile(string password, string passwordFormat)
    {
    HashAlgorithm algorithm;
    if (password == null)
    {
    throw new ArgumentNullException("password");
    }
    if (passwordFormat == null)
    {
    throw new ArgumentNullException("passwordFormat");
    }
    if (StringUtil.EqualsIgnoreCase(passwordFormat, "sha1"))
    {
    algorithm
    = SHA1.Create();
    }
    else
    {
    if (!StringUtil.EqualsIgnoreCase(passwordFormat, "md5"))
    {
    throw new ArgumentException(SR.GetString("InvalidArgumentValue", new object[] { "passwordFormat" }));
    }
    algorithm
    = MD5.Create();
    }
    return MachineKeySection.ByteArrayToHexString(algorithm.ComputeHash(Encoding.UTF8.GetBytes(password)), 0);
    }

  • 相关阅读:
    ASP.NET Core 3.0 迁移避坑指南
    Go初学乍练
    IdentityServer4 常见问题
    ASP.NET Core 奇淫技巧之动态WebApi
    Visual Studio 2019 16.1 使用 .NET Core 3.0
    【Java】maven多项目资源共享
    【Web】Web开发中的异常处理方案
    【UML】Java代码与UML模型相互转换方法
    【Spark】为什么没有任务调度到新增的Worker之上???
    【网络】高性能网络编程--下一个10年,是时候考虑C10M并发问题了
  • 原文地址:https://www.cnblogs.com/1971ruru/p/EncryptMethords.html
Copyright © 2020-2023  润新知