首页 > 编程语言 >C# 实现MD5加密

C# 实现MD5加密

时间:2023-10-19 23:11:21浏览次数:52  
标签:加密 字节 C# result 字符串 MD5

C# 实现MD5加密

C#MD5加密

日常程序开发中,涉及到敏感数据内容,通常会采取加密处理以保证数据安全,本篇文章讲述了在C#中使用MD5方法加密数据


MD5介绍

MD5的全称是message-digest algorithm 5,MD5算法属于hash算法的一类,对消息进行运算,产生一个128位的消息摘要(32位数字字母),并且加密不可逆,相同数据的加密结果一定相同。

特点

  • 任意长度的数据,算出的MD5值都是固定的长度
  • 计算容易
  • 无论对原来的数据进行多细小的改动,所得到的MD5都有很大差别
  • 弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据是非常困难的。
  • 强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

MD5解密

MD5数据是不可逆的,网上的破解工具都基于大数据解密,将大量数据的MD5值先保存起来,对于一些简单的数据,是很容易匹配到的。

使用场景

  • 用户的密码,身份信息,等等一些不愿意展示明文的数据
  • 数字签名
  • 检验双方数据文件是否一致,防篡改

C#中实现MD5加密

  1. C#中提供 MD5CryptoServiceProvider 和 MD5 两个类型提供对MD5的加密操作,其中 MD5CryptoServiceProvider 是 MD5 的派生类。
  2. 在.NET6中 MD5CryptoServiceProvider 会提示已过时,在使用的时候,以上两个类都可以去使用,但在.NET6及以上版本中会提示过时,因此建议使用 MD5 来操作。

C#代码实现

  1. MD5CryptoServiceProvider实例化,并对数据进行加密
  string Str = "要加密的字符串";
  var md5 = new MD5CryptoServiceProvider();//实例化
  //将要加密的字符串转换成字节数组
  byte[] strbt = Encoding.UTF8.GetBytes(Str)
  //对转换后的字节进行MD5加密
  byte[] result = md5.ComputeHash(strbt);
   
  1. MD5实例化,并对数据进行加密
  string Str = "要加密的字符串";
  MD5 md5 = MD5.Create();//实例化
  //将要加密的字符串转换成字节数组
  byte[] strbt = Encoding.UTF8.GetBytes(Str)
  //对转换后的字节进行MD5加密
  byte[] result = md5.ComputeHash(strbt);
  1. 上面代码中。两个类的使用方法基本一致,result为加密后产生的字节数组,长度为16
  2. 加密后将字节转换为32位数字和字母组成的字符,这里也是有两种方法
  • BitConverter方法,此方法返回的字符串为16组,以 - 分割的,每组两位字符,如需要去除可以使用Replace去除
  string StrResult = BitConverter.ToString(result);
  StrResult = StrResult.Replace("-", "");
  • 循环字节数组转成字符串,其中ToString的参数中,X大写表示转换的字符也是大写,反之则为小写
  string StrResult = "";
  for (int i = 0; i < result.Length; i++)
  {
  StrResult = StrResult + result[i].ToString("X2");
  }
  • 通过上面方法,最终生成32位字符串。
  1. 实际使用中有时会有16位和32位区分,实际16位是由32位,去除前后8位后所得到的16位字符串,其中BitConverter.ToString(result,4,12);可以直接返回16位的值
  2. 上面方法主要以字符串为例,进行加密的演示,在实际中,文件、图片等其他数据也都可以转换成字节数组进行加密。

以上是C#实现MD5加密的全部内容,针对该方法已经整理成完整的帮助类,项目已上传至Gitee,可以直接下载使用
地址 :https://gitee.com/yang-yong-666/csharp
类文件:YYEnAndDecryption.MD5Decryption.cs

标签:加密,字节,C#,result,字符串,MD5
From: https://www.cnblogs.com/sexintercourse/p/17775946.html

相关文章

  • 泛微E-Office协同管理系统存在任意文件读取漏洞CNVD-2022-07603
    漏洞描述泛微e-office是一款由泛微网络科技股份有限公司开发的办公自动化(OfficeAutomation,简称OA)系统。它是一种基于Web的协同办公平台,可以帮助企业实现电子化、自动化、智能化的办公环境。泛微e-officeofficeserver2.php文件存在任意文件读取漏洞,攻击者可利用该漏洞读取服务......
  • docker单机版Minio迁移方案
    docker单机版Minio迁移方案起因一开始并没有想到会在轻量应用服务器上部署好几个服务,因为这个轻量服务器是用来做测试用的,但是由于缺少运维的原因,正式使用的也是这台服务器上的minio,结果因为其他的服务导致服务器老是卡死,所以需要在新的服务器上重新起一个单机的minio前置条件......
  • CSP-S 2023 游记
    Day-12第一次打Div.1!!!然后:(乐)Day-2背板!有好多没背的。/ll平衡树应该可以被别的代替吧。/dxhttps://www.luogu.com.cn/contest/140258Day-1开坑,补之前发生的东西。......
  • 算法训练day37 LeetCode860.406.452.
    算法训练day37LeetCode860.406.452.860.柠檬水找零题目860.柠檬水找零-力扣(LeetCode)题解代码随想录(programmercarl.com)5:收五元10:收十元,返五元20:优先还十元+五元;否则还五元*3classSolution{public:boollemonadeChange(vector<int>&bills)......
  • MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%?
    MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%?前言上篇文章MySQL字段的时间类型该如何选择?千万数据下性能提升10%~30%......
  • vivado关联vscod不卡顿处理
    安装版本 推荐:cmd /S /k "code -g [file name]:[line number]"免安装版本只能用这个方法  D:/*****/*****/MicrosoftVSCode/Code.exe-g[filename]:[linenumber] ......
  • Rockchip RK3399 - DRM eDP驱动程序
    在《RockchipRK3399-DRM驱动程序》》我们已经介绍过了,RK3399有两个VOP,均可以支持HDMI、eDP、DP、MIPIDSI0、MIPIDSI1显示接口,本节我们选择eDP作为分析的对象。一、设备树配置1.1edp设备节点设备节点vopb下的子节点vopb_out_edp通过edp_in_vopb(由remote-endpoint属性指定)......
  • @Cacheable详解
    @Cacheable是SpringFramework中的一个注解,它可以应用在方法上,用于声明该方法的结果可以被缓存起来,以便后续的调用可以直接返回缓存中的结果,而不必真正执行方法的代码。@Cacheable注解中的参数有以下几个:value:缓存的名称,可以是一个字符串数组,表示该方法的结果可以被缓存到......
  • 泛微E-Office json_common.php文件存在sql注入漏洞
    漏洞简介泛微e-office为企业办公提供丰富应用,覆盖常见协作场景,开箱即用。满足人事、行政、财务、销售、运营、市场等不同部门协作需求,帮助组织高效人事管理。系统json_common.php文件存在SQL注入漏洞漏洞复现fofa语法:app="泛微-EOffice"登录页面如下:POC:POST/building/......
  • C++基本语法:
    C++基本语法:C++程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。对象:对象具有状态和行为。例如:一只猫的状态(颜色、名称、品种、行为、摇动、叫唤、吃),对象是类的实例。类:类可以定义为描述对象行为(或者状态)的模版(或者蓝图)。方法:从基本上说,一个方法表示一种行为。......