单向加密,简单地说就是对数据进行哈希处理,平时我们见得较多的有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