【WP开发】加密篇:单向加密
单向加密,简单地说就是对数据进行哈希处理,平时我们见得较多的有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控件上显示。
得到的运行结果请看下图。
好,正好吃饭时间快到,就此打住。下一篇文章就向大家介绍一下如果在经过网络传输的数据间进行加密和解密。
示例代码下载:https://files.cnblogs.com/files/tcjiaan/HashApp.zip
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战