C# 通用方法MD5计算
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计算相关推荐
- 终于,「最近邻搜索」有通用方法了
作者:Kevin Hartnett 编译:Bing 如果你打算开一家咖啡馆,你一定想知道:"附近最近的一家咖啡馆在哪?"了解这些信息有助于应对商业竞争. 这种现象是计算机科学中广泛 ...
- 在导出php,PHP导出通用方法
1,excel的单元格坐标,从A1开始,纵向递增数字的值,横向递增字母,当横向字母变为Z后,下一个字母为AA,然后AB,...,ZZ,...,AAA... 2,纵向坐标简单,根据每条数据的索引值就可以 ...
- HIbernate抽象出通用方法
前言 Hibernate的目标是让开发者不用写sql就能实现对象到数据表的映射操作.当然,理想很美好,现实很骨感,在使用Hibernate时会遇到很多问题,如重复的增删改查.批量对象操作.分页等等,所 ...
- java设计一个立方体类box_实例1: 设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计算并输出立方体的体积和表面积。_学小易找答案...
[填空题]表达式 list(filter(lambda x:x>2, [0,1,2,3,0,0])) 的值为 _________ . [填空题]表达式 len(' 中国 '.encode('ut ...
- java go md5_Go语言中三种不同md5计算方式的性能比较
前言 本文主要介绍的是三种不同的 md5 计算方式,其实区别是读文件的不同,也就是磁盘 I/O, 所以也可以举一反三用在网络 I/O 上.下面来一起看看吧. ReadFile 先看第一种, 简单粗暴: ...
- 大文件MD5计算 C语言 (从OpenSSL库中分离算法:三)
从OpenSSL库中分离算法-MD5算法-大文件MD5计算 续上述博客 小文件计算MD5时,可以把文件数据一次性都读到内存中计算,但当文件很大时,将文件一次性读到内存中是不可行的,此时,需要对文件数据 ...
- 拆分list的通用方法
拆分list的通用方法 java中如何实现拆分list集合 java中如何实现拆分list集合 创建一个公共类就可以省去重复拆分不同类集合的麻烦了 /**允许使用的最大记录数量*/private st ...
- javascript通用方法封装
工作上常用方法每次重写,便想封装一起,方便调用,也当作备忘录 时间字符串格式 js中的Date对象原生的方法里,都不适用实际需求:"2022-11-09 12:03:32" let ...
- 九点标定,贴合,视觉引导定位通用方法
九点标定,贴合,视觉引导定位通用方法 来看看常见的几种情况.第一种情况 眼在手外,U轴不旋转,相机固定不动, 上往下看引导机器人移动 可以使用机器人走9个点(这种方式在精度要求较高的时候不推荐 ,就算 ...
最新文章
- MySQL优化篇:排序分组优化
- 七、 熵编码算法(1)——基础知识
- 文本信息检索基本知识【转】
- 飞机大作战游戏 1----(运用H5和Js制作)
- leetCode 题 - 100. 相同的树
- 如何测试sql语句性能,提高执行效率
- 【Android基础】android shape详解
- MYSQL数据库中导入中国各个省份编号和省份
- vue3 ts 手动封装message消息组件
- 卡耐基的这100句话,畅销85年,改变了很多人
- 路口待行区设置条件与通行效能分析
- 基于AI的计算机视觉识别在Java项目中的使用(三) —— 搭建基于Docker的深度学习训练环境
- 在小公司做项目经理有意义吗_产品经理–是否具有战略意义?
- 更改文字颜色为红色HTMl语言,红色字体CSS_设置html字体颜色为红色
- 分布式事务解决方案(总览)
- 理解计算:从√2到AlphaGo——第2季 神经计算的历史背景
- 别告诉我你懂PPT.李治.扫描版.pdf
- mysql报1068_错误1068:依存服务或组无法启动
- C++排序——Bookshelf B
- 二叉树的高度和深度的理解