备注

哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串。加密哈希函数有这样一个属性:在计算不大可能找到散列为相同的值的两个不同的输入;也就是说,两组数据的哈希值仅在对应的数据也匹配时才会匹配。数据的少量更改会在哈希值中产生不可预知的大量更改。

MD5 算法的哈希值大小为 128 位。

MD5 类的 ComputeHash 方法将哈希作为 16 字节的数组返回。请注意,某些 MD5 实现会生成 32 字符的十六进制格式哈希。若要与此类实现进行互操作,请将 ComputeHash 方法的返回值格式化为十六进制值。

示例

下面的代码示例计算字符串的 MD5 哈希值,并将该哈希作为 32 字符的十六进制格式字符串返回。此代码示例中创建的哈希字符串与能创建 32 字符的十六进制格式哈希字符串的任何 MD5 哈希函数(在任何平台上)兼容。

复制

using System;

using System.Security.Cryptography;

using System.Text;

class Example

{

// Hash an input string and return the hash as

// a 32 character hexadecimal string.

static string getMd5Hash(string input)

{

// Create a new instance of the MD5CryptoServiceProvider object.

MD5 md5Hasher = MD5.Create();

// Convert the input string to a byte array and compute the hash.

byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));

// Create a new Stringbuilder to collect the bytes

// and create a string.

StringBuilder sBuilder = new StringBuilder();

// Loop through each byte of the hashed data

// and format each one as a hexadecimal string.

for (int i = 0; i < data.Length; i++)

{

sBuilder.Append(data[i].ToString("x2"));

}

// Return the hexadecimal string.

return sBuilder.ToString();

}

// Verify a hash against a string.

static bool verifyMd5Hash(string input, string hash)

{

// Hash the input.

string hashOfInput = getMd5Hash(input);

// Create a StringComparer an comare the hashes.

StringComparer comparer = StringComparer.OrdinalIgnoreCase;

if (0 == comparer.Compare(hashOfInput, hash))

{

return true;

}

else

{

return false;

}

}

static void Main()

{

string source = "Hello World!";

string hash = getMd5Hash(source);

Console.WriteLine("The MD5 hash of " + source + " is: " + hash + ".");

Console.WriteLine("Verifying the hash...");

if (verifyMd5Hash(source, hash))

{

Console.WriteLine("The hashes are the same.");

}

else

{

Console.WriteLine("The hashes are not same.");

}

}

}

// This code example produces the following output:

//

// The MD5 hash of Hello World! is: ed076287532e86365e841e92bfc50d8c.

// Verifying the hash...

// The hashes are the same.

代码:

1)获取文件MD5字符串:

// filename:文件的物理路径(如:D:\dwb\excel\AA.xls)

string ByteArrayToHexString(string filename)        {

FileStream fs = new FileStream(filename, FileMode.Open);

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

md5.Initialize();

byte[] bytes = md5.ComputeHash(fs);

md5.Clear();

fs.Close();

StringBuilder sb = new StringBuilder();

foreach (byte b in bytes)

sb.Append(b.ToString("x2"));

return sb.ToString();

}

2)加密配置文件:

string sSecretKey;// 密钥

先生成加密解密需要的密钥 sSecretKey = GenerateKey();

/// <summary>

/// 根据KEY生成密钥

/// </summary>

/// <param name="key">KEY字符串</param>

/// <returns></returns>

string GenerateKey(string key)

{

byte[] keys = new byte[8];

int j = 0;

for (int i = 0; i < keys.Length; i++)

{

keys[i] = Convert.ToByte(System.Text.Encoding.Unicode.GetBytes(key.Substring(j, 1))[0] - 5);

j += 2;

}

byte[] keys1 = new byte[8];

for (int i = 0; i < keys.Length; i++)

{

keys1[i] = keys[keys.Length - i - 1];

}

return ASCIIEncoding.ASCII.GetString(keys1);

}

/// <summary>

/// 加密文件

/// </summary>

/// <param name="sInputFilename">需要加密的文件(包括路径)</param>

/// <param name="sOutputFilename">加密后的文件(包括路径)</param>

/// <param name="sKey">密钥</param>

void EncryptFile(string sInputFilename, string sOutputFilename, string sKey)

{

FileStream fsInput = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);

FileStream fsEncrypted = new FileStream(sOutputFilename, FileMode.Create, FileAccess.Write);

DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

ICryptoTransform desencrypt = DES.CreateEncryptor();

CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write);

byte[] bytearrayinput = new byte[fsInput.Length];

fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);

cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);

cryptostream.Close();

fsInput.Close();

fsEncrypted.Close();

}

3)解密配置文件:

/// <summary>

/// 解密文件

/// </summary>

/// <param name="sInputFilename">需要解密的文件(包括路径)</param>

/// <param name="sOutputFilename">解密后的文件(包括路径)</param>

/// <param name="sKey">密钥</param>

void DecryptFile(string sInputFilename, string sOutputFilename, string sKey)

{

DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

//A 64 bit key and IV is required for this provider.

//Set secret key For DES algorithm.

DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

//Set initialization vector.

DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);

ICryptoTransform desdecrypt = DES.CreateDecryptor();

CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read);

StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);

fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());

fsDecrypted.Flush();

fsDecrypted.Close();

fsread.Close();

}

C#获取文件MD5字符串的更多相关文章

  1. QT 获取文件MD5值

    /* 方法1 */ QFile theFile(fileNamePath); theFile.open(QIODevice::ReadOnly); QByteArray ba = QCryptogra ...

  2. JAVA中获取文件MD5值的四种方法

    JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...

  3. c#获取文件MD5算法

    //获取文件MD5算法 private static string GetMD5FromFile(string fileName) { try { FileStream file = new File ...

  4. C# 获取文件MD5值的方法

    可用于对比文件是否相同 /// <summary> /// 获取文件MD5值 /// </summary> /// <param name="fileName& ...

  5. 基于js-spark-md5前端js类库,快速获取文件Md5值

    js-spark-md5是歪果仁开发的东西,有点多,但是我们只要一个js文件即可,具体类包我存在自己的oschina上,下载地址:https://git.oschina.net/jianqingwan ...

  6. 获取文件MD5值(JS、JAVA)

    文章HTML代码翻译于地址:https://www.cnblogs.com/linyihai/p/7040786.html           文件MD5有啥用?                  文 ...

  7. C# 获取文件MD5与SHA1

    之前刚开始学习编程的时候,总想着自己写一些小软件小工具. 而这个就是经典的文件MD5校验,顺便加上了一个SHA1. 在网络上下载一些东西时,会有作者提供MD5值. 它的作用就在于我们可以在下载该软件后 ...

  8. Java 获取 文件md5校验码

    讯雷下载的核心思想是校验文件的md5值,两个文件若md5相同则为同一文件. 当得到用户下载某个文件的请求后它根据数据库中保留的文件md5比对出拥有此文件的url, 将用户请求挂接到此url上并仿造一个 ...

  9. window/linux下获取文件MD5

    MD5消息摘要算法(英语: MD5 Message-Digest Algorithm), 主要用于确保信息传输过程的一致性校验.   首先介绍两个工具: window: WinMD5Free Linu ...

随机推荐

  1. iOS文件解压&&数据加密

    一文件压缩.这里我们需要一个第三方SSZipArchive(需要添加libz.td) #import "ViewController.h" #import "SSZipA ...

  2. 让UILabel的文字顶部对齐

    参考资料 http://stackoverflow.com/questions/1054558/how-do-i-vertically-align-text-within-a-uilabel 方法一 ...

  3. 关于激活Bentley软件详细步骤介绍(再补充一个)

    在安装完ContextCapture软件之后,大家怀着迫不及待的心情双击了运行快捷键.但是很遗憾的是,会产生下面的提示窗口: 也许大家并不在意,就觉得关掉这个窗口不就行了.然而,头疼的问题来了.这个窗 ...

  4. C#之 Lambda表达式

    Lambda表达式 简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能之一. 首先来看一下其发展 根据上面的发展历程,可以感到Lambda表达式愈加简化. 详 ...

  5. Scrum敏捷项目管理精要

    1. 简介: 敏捷项目管理在我们国家起步比较晚,成功运用的项目不多 百分之六十五的敏捷项目用户为scrum 2.互联网时代的特征,雷军的话: 专注,极致,口碑,快(敏捷项目开发就是要快速) 3.敏捷开 ...

  6. 大数据挖掘: FPGrowth初识--进行商品关联规则挖掘

    @(hadoop)[Spark, MLlib, 数据挖掘, 关联规则, 算法] [TOC] 〇.简介 经典的关联规则挖掘算法包括Apriori算法和FP-growth算法.Apriori算法多次扫描交 ...

  7. jquery 获取设置值、添加元素详解

    jQuery 获取内容和属性 jQuery DOM 操作 jQuery 中非常重要的部分,就是操作 DOM 的能力. jQuery 提供一系列与 DOM 相关的方法,这使访问和操作元素和属性变得很容易 ...

  8. Linux 下从头再走 GTK+-3.0 (二)

    仅仅创建一个空白窗口是不够的,下面我们为创建的窗口添加一个按钮. 以 Hello,World!为例. 首先创建一个源文件:example2.c 内容如下. #include <gtk/gtk.h ...

  9. js判断手机访问PC端跳转到手机站

    <script type="text/javascript">(function() { //得到域名后缀 var path = location.pathname.s ...

  10. 在VMware上安装CentOS-6.5 minimal - 安装VMware Tools

    由于CentOS-6.5 minimal很多工具都默认没有安装,安装VMwareTools需要用到Perl,所以老伯建议先配置好网络再接着安装. 网络配置方法可以参考在VMware上安装CentOS- ...