程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 尋找Hash後丟失的字符

尋找Hash後丟失的字符

編輯:.NET實例教程

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved