zoukankan      html  css  js  c++  java
  • C#中简单调用MD5方法以及MD5简介

    MD5简介: 
             MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法。换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。 

    MD5算法: 

    第一步:增加填充 
            增加padding使得数据长度(bit为单位)模512为448。如果数据长度正好是模512为448,增加512个填充bit,也就是说填充的个数为1-512。第一个bit为1,其余全部为0。 
    第二步:补足长度 
            将数据长度转换为64bit的数值,如果长度超过64bit所能表示的数据长度的范围,值保留最后64bit,增加到前面填充的数据后面,使得最后的数据为512bit的整数倍。也就是32bit的16倍的整数倍。在RFC1321中,32bit称为一个word。 
    第三步:初始化变量: 
    用到4个变量,分别为A、B、C、D,均为32bit长。初始化为: 
    A: 01 23 45 67 
    B: 89 ab cd ef 
    C: fe dc ba 98 
    D: 76 54 32 10 
    第四步:数据处理: 
    首先定义4个辅助函数: 
    F(X,Y,Z) = XY v not(X) Z 
    G(X,Y,Z) = XZ v Y not(Z) 
    H(X,Y,Z) = X xor Y xor Z 
    I(X,Y,Z) = Y xor (X v not(Z)) 
    其中:XY表示按位与,X v Y表示按位或,not(X)表示按位取反。xor表示按位异或。 
    函数中的X、Y、Z均为32bit。定义一个需要用到的数组:T(i),i取值1-64,T(i)等于abs(sin(i))的4294967296倍的整数部分,i为弧度。 
    假设前三步处理后的数据长度为32*16*Nbit 
    第五步:输出: 
    最后得到的ABCD为输出结果,共128bit。A为低位,D为高位。 

             MD5在ASP.net(C#)中的实现: 

    C#代码  收藏代码
    1. //欲进行md5加密的字符串  
    2.             string test = "123abc";  
    3.              
    4.             //获取加密服务  
    5.             System.Security.Cryptography.MD5CryptoServiceProvider md5CSP = new System.Security.Cryptography.MD5CryptoServiceProvider();  
    6.          
    7.             //获取要加密的字段,并转化为Byte[]数组  
    8.             byte[] testEncrypt = System.Text.Encoding.Unicode.GetBytes(test);  
    9.   
    10.             //加密Byte[]数组  
    11.             byte[] resultEncrypt = md5CSP.ComputeHash(testEncrypt);  
    12.   
    13.             //将加密后的数组转化为字段(普通加密)  
    14.             string testResult = System.Text.Encoding.Unicode.GetString(resultEncrypt);  
    15.   
    16.             //作为密码方式加密   
    17.             string Encrypt PWD = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(test, "MD5");  



    只需最后一段语句即可进行MD5加密,无需引入任何包. 

  • 相关阅读:
    golang中,new和make的区别
    k8s客户端库
    k8s 拉取私有镜像
    kubernetes-client / python
    k8s集群外go客户端示例
    K8s获取NodePort
    KUBERNETES中的服务发现机制与方式
    Rancher容器目录持久化
    rancher k8s 实现pod弹性伸缩
    在Terminal里,使用Shift+Insert来代替鼠标右键来进行粘贴操作
  • 原文地址:https://www.cnblogs.com/gc2013/p/3764697.html
Copyright © 2011-2022 走看看