[C#.NET] 如果使用 HashAlgorithm 类 / 杂凑验证文件是否有被修改
1.HashAlgorithm 类 提供我们两种Hash算法包含了SHA1、SHA256、SHA384、SHA512、MD5。
2.HashAlgorithm 类 可以用来验证文件是否有被修改过。
3.只要有修改过文件内容就会产生不可预期的杂凑值变化,如果在网络上下载一个文件,通常都会附上该文件的MD5验证码,那就是要来验证文件是否被有心人士修改过,以确保文件是安全的。
4.我们可以不用知道杂凑算法,只要会用就好了,下面范例需导入 System.Security.Cryptography 命名空间
如何取得字符串的杂凑
Step1.选择加密类型,comboBox1有SHA1及MD5两种
string myHashName = this.comboBox1.SelectedItem.ToString();
Step2.选择加密文件(或字符串)
string MyPassword = this.textBox1.Text;
Step3.建立HashAlgorithm类
HashAlgorithm ha = HashAlgorithm.Create(myHashName)
Step4.文件传成byte数组
byte[] pwData = Encoding.Default.GetBytes(MyPassword);
Step5.产生加密的Code
byte[] myHash = ha.ComputeHash(pwData);
Step6.显示杂凑值,以下提供了两种显示的方式,一种有”-“符号另外一种没有
//法一:
this.textBox2.Text = BitConverter.ToString(myHash);
//法二:
//依文件建立空字符串
StringBuilder NewHashCode = new StringBuilder(myHash.Length);
//转换成加密的Code
foreach (byte AddByte in myHash)
{
NewHashCode.AppendFormat("{0:X2}", AddByte);
}
如何取得文件的杂凑值
//1.选择加密类型
string myHashName = "SHA1";
//2.选择加密文件
String myFile = Application.StartupPath + "\boot.txt";
//若文件不存在则离开
if (!File.Exists(myFile))
{
return;
}
//3.建立HashAlgorithm类
using (HashAlgorithm ha = HashAlgorithm.Create(myHashName))
{
//4.开启文件
using (Stream myStream = new FileStream(myFile, FileMode.Open))
{
//5.产生加密的Code
byte[] myHash = ha.ComputeHash(myStream);
//6.显示杂凑值
//法一:
this.textBox2.Text = BitConverter.ToString(myHash);
//法二:
//依文件建立空字符串
StringBuilder NewHashCode = new StringBuilder(myHash.Length);
//转换成加密的Code
foreach (byte AddByte in myHash)
{
NewHashCode.AppendFormat("{0:X2}", AddByte);
}
this.textBox3.Text = NewHashCode.ToString();
}
}
?
如何比对杂凑值,这范例是延续应用,用法都与上述相同,只是要先知道文件原本的杂凑值,比对即可;可以试着修改文件内容观察其杂凑值。
//1.选择加密类型
string myHashName = "SHA1";
//2.选择加密文件
String myFile = Application.StartupPath + "\boot.txt";
//若文件不存在则离开
if (!File.Exists(myFile))
{
return;
}
//3.定义加密的Code(事先就要知道)
string OldHashCode = textBox4.Text;
//4.建立HashAlgorithm类
using (HashAlgorithm ha = HashAlgorithm.Create(myHashName))
{
//5.开启文件
using (Stream myStream = new FileStream(myFile, FileMode.Open))
{
//6.产生加密的Code
byte[] myHash = ha.ComputeHash(myStream);
//7.依文件建立空字符串
StringBuilder NewHashCode = new StringBuilder(myHash.Length);
//8.转换成加密的Code
foreach (byte AddByte in myHash)
{
NewHashCode.AppendFormat("{0:X2}", AddByte);
}
if (OldHashCode == NewHashCode.ToString())
{
textBox5.Text = NewHashCode.ToString();
}
else
{
textBox5.Text = NewHashCode.ToString();
//修改文件内容会有不同的Code
MessageBox.Show("杂凑值不相等,文档内容已被修改", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
实践过程:
范例下载:
CS_HashAlgorithm.rar
VB_HashAlgorithm.rar
若有谬误,烦请告知,新手发帖请多包涵
2010~2017 C# 第四季
原文:大专栏 [C#.NET] 如何 使用 HashAlgorithm 类 / 杂凑验证文件是否有被修改
原文地址:https://www.cnblogs.com/chinatrump/p/11496607.html
时间: 2024-10-19 16:35:41