MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
总体流程如下图所示,每次的运算都由前一轮的128位结果值和当前的512bit值进行运算 。

/// <summary>/// 取Hash字符串/// </summary>/// <param name="sourceText">原文</param>/// <param name="toUpper">返回大写字符串</param>/// <returns>Hash字符串</returns>public static string ComputeHash(string sourceText, bool toUpper = true){if (sourceText == null)return null;StringBuilder result = new StringBuilder();using (MD5 md5 = new MD5CryptoServiceProvider()){byte[] data = md5.ComputeHash(Encoding.UTF8.GetBytes(sourceText));if (toUpper)for (int i = 0; i < data.Length; i++)result.Append(data[i].ToString("X2"));elsefor (int i = 0; i < data.Length; i++)result.Append(data[i].ToString("x2"));}return result.ToString();}/// <summary>/// 取Hash字符串/// </summary>/// <param name="data">待加密数据字节结合</param>/// <param name="toUpper"></param>/// <returns></returns>public static string ComputeHash(byte[] data, bool toUpper = true){if (data == null)return string.Empty;StringBuilder result = new StringBuilder();using (MD5 md5 = new MD5CryptoServiceProvider()){if (toUpper)for (int i = 0; i < data.Length; i++)result.Append(data[i].ToString("X2"));elsefor (int i = 0; i < data.Length; i++)result.Append(data[i].ToString("x2"));}return result.ToString();}

C# 通用方法MD5计算相关推荐

  1. 终于,「最近邻搜索」有通用方法了

    作者:Kevin Hartnett 编译:Bing 如果你打算开一家咖啡馆,你一定想知道:"附近最近的一家咖啡馆在哪?"了解这些信息有助于应对商业竞争. 这种现象是计算机科学中广泛 ...

  2. 在导出php,PHP导出通用方法

    1,excel的单元格坐标,从A1开始,纵向递增数字的值,横向递增字母,当横向字母变为Z后,下一个字母为AA,然后AB,...,ZZ,...,AAA... 2,纵向坐标简单,根据每条数据的索引值就可以 ...

  3. HIbernate抽象出通用方法

    前言 Hibernate的目标是让开发者不用写sql就能实现对象到数据表的映射操作.当然,理想很美好,现实很骨感,在使用Hibernate时会遇到很多问题,如重复的增删改查.批量对象操作.分页等等,所 ...

  4. java设计一个立方体类box_实例1: 设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计算并输出立方体的体积和表面积。_学小易找答案...

    [填空题]表达式 list(filter(lambda x:x>2, [0,1,2,3,0,0])) 的值为 _________ . [填空题]表达式 len(' 中国 '.encode('ut ...

  5. java go md5_Go语言中三种不同md5计算方式的性能比较

    前言 本文主要介绍的是三种不同的 md5 计算方式,其实区别是读文件的不同,也就是磁盘 I/O, 所以也可以举一反三用在网络 I/O 上.下面来一起看看吧. ReadFile 先看第一种, 简单粗暴: ...

  6. 大文件MD5计算 C语言 (从OpenSSL库中分离算法:三)

    从OpenSSL库中分离算法-MD5算法-大文件MD5计算 续上述博客 小文件计算MD5时,可以把文件数据一次性都读到内存中计算,但当文件很大时,将文件一次性读到内存中是不可行的,此时,需要对文件数据 ...

  7. 拆分list的通用方法

    拆分list的通用方法 java中如何实现拆分list集合 java中如何实现拆分list集合 创建一个公共类就可以省去重复拆分不同类集合的麻烦了 /**允许使用的最大记录数量*/private st ...

  8. javascript通用方法封装

    工作上常用方法每次重写,便想封装一起,方便调用,也当作备忘录 时间字符串格式 js中的Date对象原生的方法里,都不适用实际需求:"2022-11-09 12:03:32" let ...

  9. 九点标定,贴合,视觉引导定位通用方法

    九点标定,贴合,视觉引导定位通用方法 来看看常见的几种情况.第一种情况 眼在手外,U轴不旋转,相机固定不动, 上往下看引导机器人移动 可以使用机器人走9个点(这种方式在精度要求较高的时候不推荐 ,就算 ...

最新文章

  1. MySQL优化篇:排序分组优化
  2. 七、 熵编码算法(1)——基础知识
  3. 文本信息检索基本知识【转】
  4. 飞机大作战游戏 1----(运用H5和Js制作)
  5. leetCode 题 - 100. 相同的树
  6. 如何测试sql语句性能,提高执行效率
  7. 【Android基础】android shape详解
  8. MYSQL数据库中导入中国各个省份编号和省份
  9. vue3 ts 手动封装message消息组件
  10. 卡耐基的这100句话,畅销85年,改变了很多人
  11. 路口待行区设置条件与通行效能分析
  12. 基于AI的计算机视觉识别在Java项目中的使用(三) —— 搭建基于Docker的深度学习训练环境
  13. 在小公司做项目经理有意义吗_产品经理–是否具有战略意义?
  14. 更改文字颜色为红色HTMl语言,红色字体CSS_设置html字体颜色为红色
  15. 分布式事务解决方案(总览)
  16. 理解计算:从√2到AlphaGo——第2季 神经计算的历史背景
  17. 别告诉我你懂PPT.李治.扫描版.pdf
  18. mysql报1068_错误1068:依存服务或组无法启动
  19. C++排序——Bookshelf B
  20. 二叉树的高度和深度的理解

热门文章

  1. A1088 Rational Arithmetic (20 分)
  2. 手机六大操作系统优缺点比较
  3. python 利用火狐浏览器爬取内容
  4. python学了没有用_如何用Python进行无监督学习
  5. 常用的web服务器软件整理(转载)
  6. 猫狗图像识别(卷积神经网络算法,TensorFlow安装)
  7. 基于skynet设计游戏服务端框架
  8. 随机函数c语言对打,20165323 学习基础和C语言基础调查
  9. 嫁人当嫁处女男 - 解构处女座男人
  10. 用Photoshop制作1寸和2寸的照片