單向加密,簡單地說就是對數據進行哈希處理,平時我們見得較多的有MD5、SHA1等,都屬於單向加密。上一篇文章中,老周跟大家扯了有關雙向加密的事,本文咱們就扯一下單向加密吧。
要對數據進行哈希處理也不是很復雜,應該說挺easy的。與雙向加密的處理有着相同的規律。
要進行哈希運算,你應該:
1、調用HashAlgorithmProvider類的OpenAlgorithm()方法產生一個HashAlgorithmProvider實例。OpenAlgorithm方法是公共靜態的,可以直接調用,參數是一個字符串,即哈希算法的名字,同樣地,這個名字也不用我們去記憶,它由HashAlgorithmNames類的靜態屬性列表直接公開,調用OpenAlgorithm方法時,按實際需要直接套“公式”就可以了。
2、得到HashAlgorithmProvider實例后,它會公開一個名為HashData的方法,調用它就可以得到數據的哈希值了。
好了,為了節約口水資源,下面給大家演示一個例子。該例子將輸入的字符串進行哈希處理。
關於界面,請欣賞下面的XAML代碼:
<StackPanel> <TextBox Name="txtInput" Header="輸入內容:"/> <ComboBox Header="選擇算法:" Name="cmbHash"> <ComboBoxItem IsSelected="True">MD5</ComboBoxItem> <ComboBoxItem>SHA1</ComboBoxItem> </ComboBox> <Button Content="加密" Click="OnHash"/> <TextBox Name="txtOutput" Header="計算結果:" IsReadOnly="True" TextWrapping="Wrap"/> </StackPanel>
用到一個ComboBox控件,用來選擇使用MD5還是SHA1算法來進行處理。下面代碼將處理按鈕的Click事件:
private void OnHash(object sender, RoutedEventArgs e) { // 將字符串轉換為二進制緩沖區 IBuffer bfstr = CryptographicBuffer.ConvertStringToBinary(txtInput.Text, BinaryStringEncoding.Utf8); // 確定算法類型 string hashtype = null; int index = this.cmbHash.SelectedIndex; if (index == 0) { // Md5 hashtype = HashAlgorithmNames.Md5; } else { // Sha1 hashtype = HashAlgorithmNames.Sha1; } // 即將進行運算 HashAlgorithmProvider hashprd = HashAlgorithmProvider.OpenAlgorithm(hashtype); IBuffer result = hashprd.HashData(bfstr); // 如果計算結果的字節長度與算法所要求的長度不等 // 則說明計算不正確,就不做處理 if (result.Length == hashprd.HashLength) { // 將結果轉化為十六進制字符串 txtOutput.Text = CryptographicBuffer.EncodeToHexString(result); } }
在代碼的最后,為了讓計算結果能以最常見的十六進制字符串的形式出現,就用CryptographicBuffer.EncodeToHexString方法把字節緩沖區中的數據變為字符串,以便在TextBlock控件上顯示。
得到的運行結果請看下圖。
好,正好吃飯時間快到,就此打住。下一篇文章就向大家介紹一下如果在經過網絡傳輸的數據間進行加密和解密。
示例代碼下載:http://files.cnblogs.com/files/tcjiaan/HashApp.zip