近日要對客戶的數據庫進行測試,其中一項就是使用不同用戶權限去測試,由於數據庫來自客戶,密碼是加密過的,其實就是的使用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'') ;