
md5的加密解密
将字符串转换为字节数组:使用可选的默认编码将源字符串转换为字节数组。 初始化加密对象:使用 创建加密器:使用上述设置创建加密器。 进行加密操作:使用 从Base64字符串中转换回字节数组:使用 初始化解密对象:使用和加密相同的密钥和偏移量创建解密服务提供商。 创建解密器:通过 进行解密操作:使用
发布日期:2021-05-08 22:18:30
浏览次数:17
分类:精选文章
本文共 2857 字,大约阅读时间需要 9 分钟。
MD5加密与解密实现
MD5加密方法
为了实现MD5加密功能,我们首先需要创建一个能提供加密服务的接口。在本文中,这个接口由MD5解密
类提供。以下是MD5加密的实现逻辑:
加密过程
DESCryptoServiceProvider
创建一个加密服务提供商,并将预定义的偏移量和密钥设置到它的Key
和IV
属性中。CryptoStream
将字节数组通过加密器进行加密,然后将结果转换为Base64字符串。代码示例
using System;using System.Text;using System.Security.Cryptography;public class MD5解密{ private byte[] IvKey = new byte[] { 102, 16, 93, 156, 78, 4, 218, 32 }; private byte[] Key = new byte[] { 55, 103, 246, 79, 36, 99, 167, 3 }; #region MD5加密 #endregion public string Md5Encrypt(string strSource) { // 将输入字符串转换成字节数组 byte[] bytIn = Encoding.Default.GetBytes(strSource); // 实例化加密服务提供商 DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider(); mobjCryptoService.Key = IvKey; mobjCryptoService.IV = Key; // 创建加密器 ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor(); // 实例化内存流 MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write); cs.Write(bytIn, 0, bytIn.Length); cs.FlushFinalBlock(); // 将结果转换为Base64字符串 return Convert.ToBase64String(ms.ToArray()); }}
MD5解密方法
解密过程
Convert.FromBase64String
方法将解密后的字符串转换为字节数组。CreateDecryptor
方法创建一个用于解密的解密器。CryptoStream
解密字节数组,并将结果返回。代码示例
public string Md5Decrypt(string Source){ // 将Base64字符串转换为字节数组 byte[] bytIn = Convert.FromBase64String(Source); // 实例化加密服务提供商 DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider(); mobjCryptoService.Key = IvKey; mobjCryptoService.IV = Key; // 创建解密器 ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor(); // 使用内存流解密 MemoryStream ms = new MemoryStream(bytIn); CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read); StreamReader strReader = new StreamReader(cs, Encoding.Default); return strReader.ReadToEnd();}
测试与结果
为了验证MD5加密与解密的正确性,我们可以编写以下测试程序:
using System;using System.Security.Cryptography;namespace ConsoleTest{ class Program { static void Main(string[] args) { // 实例化MD5解密类 MD5解密 m = new MD5解密(); // 测试MD5加密 string encrypted = m.Md5Encrypt("huaxiaoujia"); Console.WriteLine("加密结果:" + encrypted); // 测试MD5解密 string decrypted = m.Md5Decrypt(encrypted); Console.WriteLine("解密结果:" + decrypted); } }}
预期输出
程序运行的实际输出将与以下内容一致:
加密结果:KhoorZhoorORXa2something-just-an-example解密结果:huaxiaoujia
此处展示的只是一个示例,您可以根据需要修改-secret文本以测试实际加密解密效果。
注意事项
- 以上实现仅适用于MD5加密,方法与具体MD5标准稍有不同。标准MD5加密通常不使用密钥或偏移量(IV),但由于本实现聚合了部分常见加密方式,可能会产生一定的安全风险。建议在实际应用中参考MD5标准文档或使用专用安全库。
- 本文中使用的
IvKey
和Key
值是随机生成的,您可以根据需求自定义以提高加密强度。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年03月29日 21时50分39秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
数据仓库系列之维度建模
2021-05-09
Scala教程之:函数式的Scala
2021-05-09
java中DelayQueue的使用
2021-05-09
线程stop和Interrupt
2021-05-09
Android中定时执行任务的3种实现方法
2021-05-09
nodejs中npm常用命令
2021-05-09
基于Vue2.0+Vue-router构建一个简单的单页应用
2021-05-09
基于vue2.0实现仿百度前端分页效果(二)
2021-05-09
JS魔法堂:函数重载 之 获取变量的数据类型
2021-05-09
时间序列神器之争:Prophet VS LSTM
2021-05-09
SpringBoot中关于Mybatis使用的三个问题
2021-05-09
MapReduce实验
2021-05-09
Leaflet 带箭头轨迹以及沿轨迹带方向的动态marker
2021-05-09
java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式
2021-05-09
java大数据最全课程学习笔记(2)--Hadoop完全分布式运行模式
2021-05-09
大部分程序员还不知道的 Servelt3 异步请求,原来这么简单?
2021-05-09
[apue] popen/pclose 疑点解惑
2021-05-09
[apue] getopt 可能重排参数
2021-05-09
移动互联网恶意软件命名及分类
2021-05-09