技巧篇 結合反射技術實現多演算法動態加密

2021-06-03 05:56:55 字數 1264 閱讀 8066

這個題目,我姑且這樣叫吧,照例,我們先來分析一下需求。

比如有乙個設定密碼的功能,但使用者希望能夠自己選擇密碼的加密演算法,如md5、hmac、sha1等,然後程式會根據使用者所選擇的演算法對密碼進行加密並存入資料庫,同時在配置檔案中記錄下使用者的選擇。

按照一般的思路,我們可能會做乙個分支判斷,如

switch( 使用者的選擇 )

呵呵,其實我們不必要這樣做,來,先來看看md5、hmac、sha1、sha384等類有什麼共同的特徵?

1、都是通過呼叫create靜態方法來建立乙個例項,當然,像md5這些類都是抽象類,是不能被例項化的。其實,它們都返回乙個名為「演算法名cryptoserviceprovider」的類例項,如md5cryptoserviceprovider、sha1cryptoserviceprovider等,這些類都是對演算法計算的具體實現。

2、都是通過呼叫computehash方法計算雜湊值的。

而且,這些類都是位於同乙個命名空間下,因些,根據不同的演算法進行加密,唯一不同的是類名,也就是說,我們的**只寫一次就可以了,把**封裝在乙個方法中,通過在引數中傳遞類名。

能做到這種功夫的,也就用到反**,通過反射動態動呼叫類成員來完成。

/// /// 通過演算法計算雜湊值。

///

/// 演算法類名

/// 待加密的字串

/// 加密後的位元組陣列

private byte computehash(string classname, string tcode)

);if (mfo!=null));}

}}

}return bufres;

}

接著需要乙個方法來把位元組陣列轉為字串。

/// /// 把位元組陣列轉換為十六進製制字串。

///

///

///

private string bytetostr(byte bf)

return sb.tostring();

}

然後,我們就可以在其它**中使用了。

public partial class b : form

private void button1_click(object sender, eventargs e)

try}

catch (exception ex)

}

好了,現在可以執行乙個試試。

技巧篇 結合反射技術實現多演算法動態加密

這個題目,我姑且這樣叫吧,照例,我們先來分析一下需求。比如有乙個設定密碼的功能,但使用者希望能夠自己選擇密碼的加密演算法,如md5 hmac sha1等,然後程式會根據使用者所選擇的演算法對密碼進行加密並存入資料庫,同時在配置檔案中記錄下使用者的選擇。按照一般的思路,我們可能會做乙個分支判斷,如 s...

技巧篇 結合反射技術實現多演算法動態加密

這個題目,我姑且這樣叫吧,照例,我們先來分析一下需求。比如有乙個設定密碼的功能,但使用者希望能夠自己選擇密碼的加密演算法,如md5 hmac sha1等,然後程式會根據使用者所選擇的演算法對密碼進行加密並存入資料庫,同時在配置檔案中記錄下使用者的選擇。按照一般的思路,我們可能會做乙個分支判斷,如 s...

技巧篇 結合反射技術實現多演算法動態加密

這個題目,我姑且這樣叫吧,照例,我們先來分析一下需求。比如有乙個設定密碼的功能,但使用者希望能夠自己選擇密碼的加密演算法,如md5 hmac sha1等,然後程式會根據使用者所選擇的演算法對密碼進行加密並存入資料庫,同時在配置檔案中記錄下使用者的選擇。按照一般的思路,我們可能會做乙個分支判斷,如 s...