C#创建传输文件MD5验证码

由于Internet的开放性,任何文件在传输过程中都可能受到篡改,而且传输过程的不确定性,使得我们缺乏有效的方法保证传输文件的安全。为了避免上述情况,最普遍的做法是随传输文件提供一个验证码,即对传输的文件产生一个MD5的值并记录在案,用户在收到文件后,通过重新计算文件验证码并与原始验证码比较,如果不匹配则表示文件在传输过程中发生了改变。

验证传输文件MD5值的具体过程:
一、 加载文件
在构建文件验证码之前,首先需要加载文件,这就要用到.Net framework的FileStream类。在.Net framework下,文件都表示为一个Stream,即字节序列的抽象概念。而所有涉及文件的读写操作都通过Stream类的属性和方法实现。
        System.IO.FileStream fst= new System.IO.FileStream(txtFile.Text,FileMode.Open,FileAccess.Read, FileShare.Read, 8192);
这里使用了FileStream构建函数的一种重载方法,需要提一下的是最后一个参数值8192,该参数值定义的是缓冲区的大小,即当文件大于8K时,以8K为单位,对文件进行分段读取,以提高读取文件的性能。

二、 创建MD5对象
在成功创建FileStream对象之下,接下来可以使用MD5类计算该对象的哈希值。这个实现过程非常简单,只要先声明一个MD5CryptoServiceProvider实例,然后使用ComputeHash方法完成计算过程,最后通过Hash属性就可以得到计算好的字节数组了。
        System.Security.Cryptography.MD5CryptoServiceProvider md5=new System.Security.Cryptography.MD5CryptoServiceProvider();
        System.IO.FileStream fst= new System.IO.FileStream(txtFile.Text,FileMode.Open,FileAccess.Read, FileShare.Read, 8192);
        md5.ComputeHash(fst);
        byte[] hash=md5.Hash;

三、转换验证码字符串
由于MD5哈希算法返回的是一个字节数据,因此需要转换成字符串。
 byte[] hash=md5.Hash;
        StringBuilder sb=new StringBuilder();
        foreach(byte byt in hash)
        {
               sb.Append(String.Format("{0:X1}", byt));

        }
        //TextBox1.Text = sb.ToString();将转换的验证码字符串跟原始验证码对比

        在转换过程中,首先定义了一个StringBuilder对象,这主要是处于性能上的考虑;接着遍历MD5哈希值中的每个字节,并使用String.Format方法直接将字节转换成16进制格式的字符串,最后输出结果字符串即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值