1. MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法(易错)。任何长度的任意内容都可以用MD5计算出散列值。MD5的前身:MD2、MD3、MD4。介绍工具:CalcMD5.zip。主要作用就是【验明"真身"】,字符串文件均可(确保信息传输过程中的完整性、一致性)。

2. MD5算法的特点:

    1. 长度固定

    2. 单向性 ---- 可以通过MD5计算器来计算文件或者字符串的MD5值,但是不可以通过给出的MD5值来推算出文件或者字符串。

    3. 抗冲突性(不重复)

    4. "雪崩效应",只要源发生一点变化,就会造成大的变化

    5. 不同的"源",生成的MD5值总是不一样的,相同的"源",产生的总是相同的MD5值。

    6. 同样的内容,每次生成的MD5值是一样的。

3. 代码实现【计算文件和字符串的MD5值】

    ·计算字符串的MD5值:

     ///
<summary>


///
计算字符串的MD5值


///
</summary>


///
<param name="msg"></param>


///
<returns></returns>


private
static
string
GetMD5FromString(string
msg)

{


//1.创建一个用来计算MD5值的类对象

 


using (MD5
md5
=
MD5.Create())

{


//把字符串转换为byte[]数组


//注意:如果字符串中包含汉字,则这里会把汉字使用utf-8编码转换为byte[],当其他地方计算MD5值的时候,如果对汉字使用了不同的编码,则同样的汉字生成的byte[]是不一样的,所以计算出的MD5值也就不一样了。

 


//byte[] msgBuffer = Encoding.Default.GetBytes(msg); 使用系统默认的编码


byte[] msgBuffer
=
Encoding.UTF8.GetBytes(msg);


//2. 计算给定的字符串的MD5值


的byte[]数组转化为一个长度为32的字符串:就是把一个byte转成16进制同时保留2位即可。


byte[] md5Buffer=
md5.ComputeHash(msgBuffer);


md5.Clear();//释放资源


StringBuilder
sbMd5=new
StringBuilder();


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

{


进制输出,并保留2位


sbMd5.Append(md5Buffer[i].ToString("x2"));

}


return
sbMd5.ToString();

}

}


///
<summary>


///
计算文件的MD5值


///
</summary>


///
<param name="path"></param>


///
<returns></returns>


private
static
string
GetMD5FromFile(string
path)

{


using (MD5
md5
=
MD5.Create())

{


using (FileStream
fsRead
=
File.OpenRead(path))

{


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


md5.Clear();


StringBuilder
sbMd5=new
StringBuilder();


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

{


sbMd5.Append(bytes[i].ToString("x2"));

}


return
sbMd5.ToString();

}

}

}

MD5算法【计算文件和字符串的MD5值】的更多相关文章

  1. Android初级教程:对文件和字符串进行MD5加密工具类

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/52200008   点击打开链接 之前写过一篇博文,是针对字符串进行md5加密的.今 ...

  2. linux下md5sum用法 (查看文件或字符串的md5值)

    MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长 ...

  3. (工具类)MD5算法|时间格式转换|字符串转数字

    package vote.utils; import java.security.MessageDigest; import java.text.SimpleDateFormat; import ja ...

  4. Levenshtein Distance + LCS 算法计算两个字符串的相似度

    //LD最短编辑路径算法 public static int LevenshteinDistance(string source, string target) { int cell = source ...

  5. windows下计算文件的md和sha值

    在windows下可以使用FCIV命令行工具计算文件的md5和sha值,具体例子如下: FCIV -md5 -sha1 path\filename.ext 例如: FCIV-md5-sha1 c:\w ...

  6. 《java入门第一季》之对文件和字符串进行MD5加密工具类

    上一篇介绍了MD5加密算法,之前写的代码有些冗余,而且可读性很差.今天把对文本数据的加密,以及获取文件的md5值做一个封装类.代码如下: package com.itydl.utils; import ...

  7. iOS:使用莱文斯坦距离算法计算两串字符串的相似度

    Levenshtein:莱文斯坦距离 Levenshtein的经典算法,参考http://en.wikipedia.org/wiki/Levenshtein_distance的伪代码实现的,同时参考了 ...

  8. 字符串、字节数组、流之间的相互转换以及文件MD5的计算

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace myMe ...

  9. c#计算文件的MD5值

    代码: /// <summary> /// 计算文件的 MD5 值 /// </summary> /// <param name="fileName" ...

随机推荐

  1. 树莓派高级GPIO库,wiringpi2 for python使用笔记(三)GPIO操作

    GPIO库的核心功能,当然就是操作GPIO了,GPIO就是"通用输入/输出"接口,比如点亮一个LED.继电器等,或者通过iic spi 1-wire等协议,读取.写入数据,这都是G ...

  2. Xcode GDB 命令list

    此文下半部分为转载:但是这里有一些我自己使用技巧,结合下面的文章,我们会有更多的收获,在此感谢原创者.     --------------------- 关于调试异常崩溃: 一般崩溃是由内存使用错误 ...

  3. (Problem 92)Square digit chains

    A number chain is created by continuously adding the square of the digits in a number to form a new ...

  4. C# 基础中有关术语理解

    一.栈vs堆  深入理解堆栈.堆在内存中的实现 二.Socket 深入探析c# Socket 三.多线程 c# 多线程 --Mutex(互斥锁)

  5. 批处理[Batch]

    批处理 1. 定义:就是一堆DOS命令按一定顺序排列而形成的集合. 英文译为BATCH,批处理文件后缀BAT就取的前三个字母. 示例1:a.bat @echo off Netstat –a –n &g ...

  6. Android开发笔记--hello world 和目录结构

    原文:Android开发笔记--hello world 和目录结构 每接触一个新东西 都有一个hello world的例子. 1.新建项目 2.配置AVD AVD 没有要新建个,如果不能创建 运行SD ...

  7. Html 小插件6 百度新闻插件

    新闻免费代码"http://news.baidu.com/newscode.html ,便可在输入希望订阅的关键词后,根据相关选项的设置,百度便非常快的在当前页面的文本编辑框内生成相关代码. ...

  8. Android应用开发基础篇(4)-----TabHost(选项卡)

    一.概述 TabHost是一种用来显示标签的组件,不清楚?看一下来电通这个应用就知道了.这个组件用起来与其他组件不太一样,它需要继承TabActivity这个类,还有它的布局文件与我们平时用的也有些不 ...

  9. 关于android 双击事件

    大家好,关于android双击事件 我相信大家都知道 API中是有个方法的,但是必须在Activity中在能使用. 对于到底用不用android 双击事件API各有各的看法. 在Activity中使用 ...

  10. 远程登录阿里云上的MySQL

    近期对云和server之类的感兴趣,想要将自己的数据什么的保存到远端server.研究了阿里云和百度云.今天算是有点进步吧. 我在阿里云上申请了个免费的云server(ECS),非常可惜仅仅能用5天. ...