知识大全 .NET Hash 简单实例
Posted 文件
篇首语:水深难见底,虎死不倒威。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .NET Hash 简单实例相关的知识,希望对你有一定的参考价值。
.NET Hash 简单实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
NET框架中提供了许多Hash类 每种算法的实现方式不同 但是在使用层面上 NET为我们提供了几乎一致的操作 所谓一通百通 在本节不打算把所有的算法都做演示 因为这样既没必要性也鄙视读者的智商
关于SHA 我们选用托管实现SHA Managed类做演示 在实际应用中 我建议各位读者尽可能的使用托管实现 因为基于加密服务的实现对特定的操作系统环境有依赖性
代码清单 演示了简单的Hash应用 将一个字符串散列之后保存散列值 然后对字符串做验证操作
代码清单 SHA Managed类的简单应用
class Program
static SHA Managed sha M = new SHA Managed();
static void Main(string[] args)
string testString = 大家好 我是xuanhun 欢迎阅读我的文章! ;
byte[] hashY = GetHashData(testString testString);
string testString = 大家好 我是xuanhun 欢迎阅读我的文章! ;
byte[] hashY = GetHashData(testString testString );
string ChangedString = 大家好 我是xuanhun 欢迎阅读我的文章 ;
byte[] hashChange = GetHashData(ChangedString ChangedString);
Console Read();
private static byte[] GetHashData(string s string ys)
Console WriteLine( : ys);
byte[] buffer = Encoding UTF GetBytes(s);
byte[]hashBytes= sha M ComputeHash(buffer);
OutHash(hashBytes);
return hashBytes;
private static void OutHash(byte[] hashBytes)
foreach (byte b in hashBytes)
Console Write( b);
Console WriteLine();
Console WriteLine();
现在我们简单分析代码清单 先看GetHashData方法 它的主要工作是对传入的字符串s做处理 获取它的hash值 第一步通过Encoding UTF GetBytes(s)把字符串转成byte数组 然后对该byte数组进行散列操作 完成操作的是下面这条语句
byte[]hashBytes= sha M ComputeHash(buffer)
sha M是SHA Managed的实例 这里我们使用ComputeHash方法返回byte数组的Hash值
OutHash方法用来输出散列值
Main方法中我定义了三个字符串 第一个和第二个字符串完全一样 第三个字符串只少了一个叹号( ! ) 下面我们看一下这段程序的运行结果 如图 所示
图 代码清单 的运行结果
从图 中我们很容易看出 改掉一个字符 hash值发生了很大的变化
在实际应用中 为了增强安全性 我们更倾向于使用键控Hash NET中的每个Hash加密算法都有对应的键控Hash类 针对于上个例子 我们演示如何使用HMACSHA 类 实例程序如代码清单 所示
代码清单 HMACSHA 类应用实例
class Program
public static void Encript(byte[] key String sourceFile String destFile)
HMACSHA myhmacsha = new HMACSHA (key);
FileStream inStream = new FileStream(sourceFile FileMode Open);
FileStream outStream = new FileStream(destFile FileMode Create);
byte[] hashValue = myhmacsha ComputeHash(inStream);
inStream Position = ;
outStream Write(hashValue hashValue Length);
int bytesRead;
byte[] buffer = new byte[ ];
do
bytesRead = inStream Read(buffer );
outStream Write(buffer bytesRead);
while (bytesRead > );
myhmacsha Clear();
inStream Close();
outStream Close();
return;
public static bool Decript(byte[] key String sourceFile)
HMACSHA hmacsha = new HMACSHA (key);
byte[] storedHash = new byte[hmacsha HashSize / ];
FileStream inStream = new FileStream(sourceFile FileMode Open);
inStream Read(storedHash storedHash Length);
byte[] putedHash = hmacsha ComputeHash(inStream);
for (int i = ; i < storedHash Length; i++)
if (putedHash[i] != storedHash[i])
Console WriteLine( Hash值验证失败文件被篡改! );
return false;
Console WriteLine( 文件完整! );
return true;
public static void Main(string[] Fileargs)
string file = @ f:\\ txt ;
string file = @ f:\\ txt ;
try
byte[] secretkey = new Byte[ ];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng GetBytes(secretkey);
Encript(secretkey file file );
Decript(secretkey file );
catch (IOException e)
Console WriteLine(e Message);
Console Read();
看代码清单 在Main方法中 我定义了file 和file 两个变量 file 为本地磁盘的一个已经存在的文件 file 是未存在的文件 将由程序创建 下面注意Main方法中的这两句代码
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng GetBytes(secretkey);
RNGCryptoServiceProvider类提供方法用来生成高强度随机数 这里我们用来生成作为HMACSHA 类的加密和解密的密钥
Encript方法用来使用HMACSHA 类生成文件file 的加密Hash值 我们首先创建了两个文件流inStream和outStream分别对应file 和file 然后读取file 的内容 使用myhmacsha ComputeHash方法获取加密的Hash值 并将该值写入file
Decript方法用来验证文件完整性 验证文件完整性的方法很简单 我们读出保存在file 中key的Hash数据 然后使用之前的Key对该数据执行Hash 如果得到的Hash值和取出的KeyHash值相同 则数据完整
执行加密Hash的过程后 file 和file 的文件内容如图 所示
图 执行加密Hash的过程后 file 和file 的文件内容
从图中 我们可以看出 加密Hash值被添加在原文内容的前边
验证结果如图 所示
cha138/Article/program/ASP/201311/21811相关参考
知识大全 一个简单的ASP.NET Forms 身份认证的实例方法
一个简单的ASP.NETForms身份认证的实例方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
同Java一样简单!VB.NET多线程开发实例 以下文字资料是由(历史新知网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! VBNET
这篇文章介绍了aspnet数据绑定的实例代码有需要的朋友可以参考一下 复制代码代码如下:cha138/Article/program/net/201311/14140
实例讲解.NET多线程执行函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这里为什么会出现多
vb.net中应用ArrayList实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Arra
.Net平台应用程序唯一运行实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘要 本文阐述
一个ASP.Net下的WebShell实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一个ASP
.NET中自定义配置节点实例详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一目的 一般应
ASP.NET用户控件操作ASPX页面 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一简单实例
Hash算法大全(java实现) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hash算法有很