寻找Hash后丢失的字符

来源:互联网 发布:网络风景图片大全图片 编辑:程序博客网 时间:2024/05/21 06:44

近日要对客户的数据库进行测试,其中一项就是使用不同用户权限去测试,由于数据库来自客户,密码是加密过的,其实就是的使用SHA1简单的Hash一下,方法就是直接用.NET框架提供的,如下:

FormsAuthentication.HashPasswordForStoringInConfigFile(strPassword,"SHA1");

现在要把用户的密码替换成我们自己的填写的密码进行测试,想当然的是用.NET提供的方法去做一个小工具了,可在WinForm中可没有FormsAuthentication.HashPasswordForStoringInConfigFile,但有System.Security.Cryptography可以使用,于是就有如下代码:

private void btnHash_Click(object sender, EventArgs e)
        
{
            
string strPassword = this.txtPassword.Text.ToString();
            
string strHashCode = "";
            SHA1 sha1 
= new SHA1CryptoServiceProvider();
            UTF8Encoding utf 
= new UTF8Encoding();
            
byte[] byteA1 = utf.GetBytes(strPassword);
            
byte[] byteA2 = sha1.ComputeHash(byteA1);
            sha1.Clear();
            
foreach (byte byteTmp in byteA2)
            
{
                strHashCode 
+= Convert.ToString(byteTmp, 16);
            }

            strHashCode 
= strHashCode.ToUpper();
            
if (strPassword != "")
            
{
                
this.txtHashCode.Text = strHashCode;    
            }

        }

但是,发觉Hash出来的字符串很多时候都不够40位,和在WEB中得出的字符串不一致,后来把每个散列的字符串逐一列出来才发觉,有些转换成16进制是“0X”,就直接是“X”,那个“0”就消失,呵呵,真是麻烦,只好自己手动填充一下了 :)

// PadLeft(2,'0 ) 填补转换后少取一位 "0"
strHashCode += Convert.ToString(byteTmp, 16).PadLeft(2, '0') ;

 

原创粉丝点击