[C#.NET] 如何 使用 HashAlgorithm 类 / 杂凑验证文件是否有被修改

[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

[C#.NET] 如何 使用 HashAlgorithm 类 / 杂凑验证文件是否有被修改的相关文章

SM3杂凑算法实现——第三部分

SM3杂凑算法实现--第三部分 一.SM3 密码概述 我们首先把需要用到的算法呈现出来,最后我们再考虑如何集合为一个库的方法,这一部分我们就开始编写一个新的算法:国家商用密码标准SM3密码算法. 首先要明白SM3是一个什么样的东西:单向加密算法.也可以称之为密码哈希算法.杂凑算法.摘要算法,都可以指这类算法.顾名思义,这类算法只能加密不能解密,所以不是为了直接保护数据的秘密性而存在的,不是让使用者解密这串密文得到原文而使用的.这类算法一般用于保护数据明文的完整性,抗篡改而产生.只要输入的是同样的

国密杂凑算法SM3

0. 引言 SM3杂凑算法是中国国家密码局公布的hash算法商用标准,能应用于数字签名与验证.消息认证码的生成以及伪随机数的生成. 1. 常数与函数 1.1 初始值 IV = 7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e 1.2 常量 Tj={ 79cc4519    0≤j≤15:7a879d8a    16≤j≤63} 1.3 布尔函数 FFj(X,Y,Z)={X^Y^Z  0≤j≤15:(X

MyBatis Spring整合配置映射接口类与映射xml文件

Spring整合MyBatis使用到了mybatis-spring,在配置mybatis映射文件的时候,一般会使用MapperScannerConfigurer,MapperScannerConfigurer会自动扫描basePackage指定的包,找到映射接口类和映射XML文件,并进行注入.配置如下: [html] view plain copy <!-- 数据源 --> <bean id="dataSource" class="com.mchange.v

用 Qt 的 QAudioOutput 类播放 WAV 音频文件

用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件,那么 Qt 里简单的 QSound 类是最适合的.但是 QSound 有一个很大的缺陷就是无法选择用哪个声卡.一番研究之后,决定用 QAudioOutput 来播放 WAV 音频文件. 网上也能找到几篇相关的文章,比如: http://blog.csdn.net/qyee16/article/det

java类打包成jar文件&amp;&amp;jar包的引入

一.将类打包成jar文件 首先分别看下MainActivity.java和func.java的源代码 现在要将func.java打包成jar包,方法如下: a.右击func.java ->Export ->Java ->JAR file b.在Select the resources to export中选择要打包的类,这里注意,如果这个类有调用其他动态/静态库,不需要一起选择,只选择java文件.库文件随着jar一起放到新工程目录下即可引用.然后输入JAE名称和存放位置,点finish

用 Qt 的 QAudioOutput 类播放 WAV 音频文件(使用了libsndfile外部库)

用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件,那么 Qt 里简单的 QSound 类是最适合的.但是 QSound 有一个很大的缺陷就是无法选择用哪个声卡.一番研究之后,决定用 QAudioOutput 来播放 WAV 音频文件. 网上也能找到几篇相关的文章,比如: http://blog.csdn.net/qyee16/article/det

利用opencv的FileStorage类实现XML/YAML文件的读写

FileStorage是opencv2.0以后专门用来读写XML/YAML文件的类,标准的C++实现.利用好XML文件可以极大地方便我们对中间数据的处理. 官方文档: (1) http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/file_input_output_with_xml_yml/file_input_output_with_xml_yml.html#fileinputoutputxmlyaml (2) htt

java查找重复类/jar包/普通文件

开发web应用时,有时更新了类却没有生效,其实是因为jboss/tomcat中其他发布包下有同名类(包括全路径都相同). 于是萌发了做个程序来检查指定目录是否存在重复类(通过asm从类文件中取类的全路径),扩展开来,还支持查找重复的文件(按文件md5进行比较),重复的jar文件. 主要代码如下: 简单测试代码: package cn.jerryhouse.util.dup_files.test; import java.io.File; import org.junit.Test; import

解析HTML文件 - 运用SgmlReader类来解析HTML文件

运用.NET Framework类来解析HTML文件.读取数据并不是最容易的.虽然你可以用.NET Framework中的许多类(如StreamReader)来逐行解析文件,但XmlReader提供的API并不是“取出即可用(out of the box)”的,因为HTML的格式不规范.你可以用正则表达式(regular expression),但如果你对这些表达式运用不熟练,你可能开始时会觉得它们有些难. Microsoft的XML大师Chris Lovett最近在http://www.got