Asp.Net 常用工具类之加密——密码可逆与不可逆(3)

    互联网技术发展的很快,带来的问题也是很多,密码安全泄露事件、数据库事件等等层出不穷。

    1、13年腾讯QQ账号密码泄露事件。

  

    2、15年携程出现删库的事件。

                         

    3、前两天亚马逊出现四个小时的宕机事件,原因是因为程序员打错了一个字符,导致半个互联网瘫痪(说多少次了,我敲代码的时候不要打扰我,打错了一个字母可能导致整个互联网瘫痪)!

  

    

  



  言归正传,今天主要讲一下加密的可逆与不可逆!   

  前两天我们讲了RSA和DES两种加密方式,他们都以加密密钥key进行加解密,这样可以得到加密后串,同时根据key和串可以得到解密密码,这两个加密按照分类是可逆的。

  当然在一些场景下,我们可能安全着想,进行不可逆加密,平常见到的MD5、SHA就是最典型的代表!

  MD5和SHA加密的时候不用所谓的key,同时一般情况下也不能进行解密,因为他是不可逆的,这样做能够保证一定的安全性,即使你有加密后的串,也不能进行破解(大牛勿论),比如你的数据库用户表password存的是md5加密后的串,那么即使别人得到也无可奈何!

  

  下面通过两段代码展示一下MD5和SHA加密方法:

  

  MD5:

using System;
using System.Security.Cryptography;
using System.Text;

namespace Utils.PassWord
{
    /// <summary>
    /// MD5加解密
    /// </summary>
    public static class MD5
    {
        /// <summary>
        /// MD5 16位加密,不可逆
        /// </summary>
        /// <param name="password"></param>
        public static string Encrypt16Bit(string password)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            string str = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(password)), 4, 8);
            str = str.Replace("-", "");
            return str;
        }

        /// <summary>
        ///  MD5 32位加密,不可逆
        /// </summary>
        /// <param name="password"></param>
        public static string Encrypt32Bit(string password)
        {
            string pwd = "";
            System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
            byte[] str = md5.ComputeHash(Encoding.UTF8.GetBytes(password));
            for (int i = 0; i < str.Length; i++)         // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
                pwd = pwd + str[i].ToString("X");        // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
            return pwd;
        }

        /// <summary>
        ///  MD5 64位加密,不可逆
        /// </summary>
        /// <param name="password"></param>
        public static string Encrypt64Bit(string password)
        {
            System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
            byte[] str = md5.ComputeHash(Encoding.UTF8.GetBytes(password));
            return Convert.ToBase64String(str);
        }
    }
}

调用方式
public static void md5()
{
    var str1 = MD5.Encrypt16Bit("123456789");
    var str2 = MD5.Encrypt32Bit("123456789");
    var str3 = MD5.Encrypt64Bit("123456789");
}

 

  SHA:  

using System.Linq;

namespace Utils.PassWord
{
    /// <summary>
    /// SHA加解密
    /// </summary>
    public static class SHA
    {
        /// <summary>
        /// SHA-1
        /// </summary>
        /// <param name="str"></param>
        public static string SHA_1(string str)
        {
            System.Security.Cryptography.SHA1CryptoServiceProvider SHA1CSP = new System.Security.Cryptography.SHA1CryptoServiceProvider();
            byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(str);
            byte[] bytHash = SHA1CSP.ComputeHash(bytValue);
            SHA1CSP.Clear();
            string hashstr = "", tempstr = "";
            for (int counter = 0; counter < bytHash.Count(); counter++)
            {
                long i = bytHash[counter] / 16;
                if (i > 9)
                    tempstr = ((char)(i - 10 + 0x41)).ToString();
                else
                    tempstr = ((char)(i + 0x30)).ToString();
                i = bytHash[counter] % 16;
                if (i > 9)
                    tempstr += ((char)(i - 10 + 0x41)).ToString();
                else
                    tempstr += ((char)(i + 0x30)).ToString();
                hashstr += tempstr;
            }
            return hashstr;
        }

        /// <summary>
        /// SHA-256
        /// </summary>
        /// <param name="str"></param>
        public static string SHA_256(string str)
        {
            System.Security.Cryptography.SHA256CryptoServiceProvider SHA256CSP = new System.Security.Cryptography.SHA256CryptoServiceProvider();
            byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(str);
            byte[] bytHash = SHA256CSP.ComputeHash(bytValue);
            SHA256CSP.Clear();
            string hashstr = "", tempstr = "";
            for (int counter = 0; counter < bytHash.Count(); counter++)
            {
                long i = bytHash[counter] / 16;
                if (i > 9)
                    tempstr = ((char)(i - 10 + 0x41)).ToString();
                else
                    tempstr = ((char)(i + 0x30)).ToString();
                i = bytHash[counter] % 16;
                if (i > 9)
                    tempstr += ((char)(i - 10 + 0x41)).ToString();
                else
                    tempstr += ((char)(i + 0x30)).ToString();
                hashstr += tempstr;
            }
            return hashstr;
        }

        /// <summary>
        /// SHA-384
        /// </summary>
        /// <param name="str"></param>
        public static string SHA_384(string str)
        {
            System.Security.Cryptography.SHA384CryptoServiceProvider SHA384CSP = new System.Security.Cryptography.SHA384CryptoServiceProvider();
            byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(str);
            byte[] bytHash = SHA384CSP.ComputeHash(bytValue);
            SHA384CSP.Clear();
            string hashstr = "", tempstr = "";
            for (int counter = 0; counter < bytHash.Count(); counter++)
            {
                long i = bytHash[counter] / 16;
                if (i > 9)
                    tempstr = ((char)(i - 10 + 0x41)).ToString();
                else
                    tempstr = ((char)(i + 0x30)).ToString();
                i = bytHash[counter] % 16;
                if (i > 9)
                    tempstr += ((char)(i - 10 + 0x41)).ToString();
                else
                    tempstr += ((char)(i + 0x30)).ToString();
                hashstr += tempstr;
            }
            return hashstr;
        }

        /// <summary>
        /// SHA-512
        /// </summary>
        /// <param name="str"></param>
        public static string SHA_512(string str)
        {
            System.Security.Cryptography.SHA512CryptoServiceProvider SHA512CSP = new System.Security.Cryptography.SHA512CryptoServiceProvider();
            byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(str);
            byte[] bytHash = SHA512CSP.ComputeHash(bytValue);
            SHA512CSP.Clear();
            string hashstr = "", tempstr = "";
            for (int counter = 0; counter < bytHash.Count(); counter++)
            {
                long i = bytHash[counter] / 16;
                if (i > 9)
                    tempstr = ((char)(i - 10 + 0x41)).ToString();
                else
                    tempstr = ((char)(i + 0x30)).ToString();
                i = bytHash[counter] % 16;
                if (i > 9)
                    tempstr += ((char)(i - 10 + 0x41)).ToString();
                else
                    tempstr += ((char)(i + 0x30)).ToString();
                hashstr += tempstr;
            }
            return hashstr;
        }
    }
}

调用方式:
 public static void sha()
 {
     var aaa1 = SHA.SHA_1("123456789");
     var aaa2 = SHA.SHA_256("123456789");
     var aaa3 = SHA.SHA_384("123456789");
     var aaa4 = SHA.SHA_512("123456789");
 }

 

  

  加解密这一块这几天也写了几篇,一些加解密原理性的东西我也不懂,这个涉及到更高深的密码学,臣妾做不到!

  下一期我跟大家讨论讨论常用的Office组件功能,包括常用的csv,excel,html,pdf,word导入导出方法,预知详情,下回分解。

  在这里感谢各位看官的支持,你的支持就是我的动力!

  

  个人头条号:http://www.toutiao.com/m4129397771/

时间: 2024-10-24 04:19:26

Asp.Net 常用工具类之加密——密码可逆与不可逆(3)的相关文章

Asp.Net 常用工具类之加密——对称加密DES算法(2)

又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有个家(毕竟年级不小了),有盼头的工作前景. 看到老赵和老跳两位前辈的故事,真实且现实,同时也有一丢丢的小迷茫,敢问路在何方! 感叹一会儿,生命不止,Code不止,继续入坑! 昨天分享了一下非对称加密RSA算法,今天给朋友们分享一下对称加密DES算法案例. 加解密过程: 1.生成加密密钥key,密码越

[C#] 常用工具类——加密解密类

using System; using System.Configuration; using System.Collections.Generic; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using S

[C#] 常用工具类——文件操作类

/// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在</para> /// <para> IsImgFilename:判断文件名是否为浏览器可以直接显示的图片文件名</para> /// <para> CopyFiles:复制指定目录的所有文件</para> /// <para> MoveFi

java常用工具类(java技术交流群57388149)

package com.itjh.javaUtil; import java.util.ArrayList; import java.util.List; /** * * String工具类. <br> * * @author 宋立君 * @date 2014年06月24日 */ public class StringUtil { private static final int INDEX_NOT_FOUND = -1; private static final String EMPTY =

Spring 常用工具类

1) 请求工具类 org.springframework.web.bind.ServletRequestUtils //取请求参数的整数值: public static Integer getIntParameter(ServletRequest request, String name) public static int getIntParameter(ServletRequest request, String name, int defaultVal) -->单个值 public sta

[精品] 收集的27个java开发常用工具类.基本满足开发需求

原文:[精品] 收集的27个java开发常用工具类.基本满足开发需求 源代码下载地址:http://www.zuidaima.com/share/1596028005993472.htm 最近从网上收集的java开发常用的工具类,分享给大家.基本满足开发需求.推荐给热爱最代码以及java的牛牛们.   每个类都有注释的,欢迎大家可以下载使用. 字符编码:CharTools, base64:Base64 *.java Md5加密:  MD5*.java 上传:*Uploader* 生成缩略图类:T

commons-lang常用工具类StringEscapeUtils使用

在apache commons-lang(2.3以上版本)中为我们提供了一个方便做转义的工具类,主要是为了防止sql注入,xss注入攻击的功能. commons-lang常用工具类StringEscapeUtils使用 - wjoygz - pauls private zone 1.escapeSql 提供sql转移功能,防止sql注入攻击,例如典型的万能密码攻击' ' or 1=1 ' ' 1StringBuffer sql = new StringBuffer("select key_sn,

.NET常用工具类——COOKIES操作类

using System;using System.Collections;using System.Collections.Generic;using System.Collections.Specialized;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.We

【转载】Android应用框架及常用工具类总结

转载自:Android应用框架 http://www.tuicool.com/articles/feqmQj 常用工具类总结    http://blog.csdn.net/krislight/article/details/11354119 一. UML类图复习: UML类图中有些标记很容易混淆,这里先复习下,请大家看下面这幅图: 注:这幅图来自<大话设计模式>这本书中的插图. 二.应用框架: A.基本概念 抽象(抽出共同之现象)——在同领域的程序中,常含有许多类别,这些类别有其共同点,我们