getMD5.exe (拖动任意文件至工具、或在工具中输入字符串,获取MD5值)

工具源码

MD5加密源码:(加密源码源自网络,做了部分修改精简)

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Sci
{//示例: // MD5.Encrypt("a");                        // 计算字符串MD5值// MD5.Encrypt(new FileInfo("D:\\1.rar"));  // 计算文件MD5值// MD5.Encrypt(byte[] Bytes);               // 计算Byte数组MD5值//MD5 ("") = d41d8cd98f00b204e9800998ecf8427e   //MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661   //MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72   //MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0   //MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b  class MD5{#region MD5调用接口/// <summary>/// 计算data的MD5值/// </summary>public static string Encrypt(string data){uint[] X = To16Array(data);return calculate(X);}/// <summary>/// 计算byte数组的MD5值/// </summary>public static string Encrypt(byte[] Bytes){uint[] X = To16Array(Bytes);return calculate(X);}/// <summary>/// 计算文件的MD5值/// </summary>public static string Encrypt(FileInfo file){uint[] X = To16Array(file);return calculate(X);}#endregion#region MD5计算逻辑/// <summary>/// 转化byte数组为uint数组,数组长度为16的倍数/// /// 1、字符串转化为字节数组,每4个字节转化为一个uint,依次存储到uint数组/// 2、附加0x80作为最后一个字节/// 3、在uint数组最后位置记录文件字节长度信息/// </summary>public static uint[] To16Array(byte[] Bytes){uint DataLen = (uint)Bytes.Length;// 计算FileLen对应的uint长度(要求为16的倍数、预留2个uint、最小为16)uint ArrayLen = (((DataLen + 8) / 64) + 1) * 16;     uint[] Array = new uint[ArrayLen];uint ArrayPos = 0;int pos = 0;uint ByteCount = 0;for (ByteCount = 0; ByteCount < DataLen; ByteCount++){// 每4个Byte转化为1个uintArrayPos = ByteCount / 4;pos = (int)(ByteCount % 4) * 8;Array[ArrayPos] = Array[ArrayPos] | ((uint)Bytes[ByteCount] << pos);}// 附加0x80作为最后一个字节,添加到uint数组对应位置ArrayPos = ByteCount / 4;pos = (int)(ByteCount % 4) * 8;Array[ArrayPos] = Array[ArrayPos] | ((uint)0x80 << pos);// 记录总长度信息Array[ArrayLen - 2] = (DataLen << 3);Array[ArrayLen - 1] = (DataLen >> 29);return Array;}/// <summary>/// 转化字符串为uint数组,数组长度为16的倍数/// /// 1、字符串转化为字节数组,每4个字节转化为一个uint,依次存储到uint数组/// 2、附加0x80作为最后一个字节/// 3、在uint数组最后位置记录文件字节长度信息/// </summary>public static uint[] To16Array(string data){byte[] datas = System.Text.Encoding.Default.GetBytes(data);return To16Array(datas);}/// <summary>/// 转化文件为uint数组,数组长度为16的倍数/// /// 1、读取文件字节信息,每4个字节转化为一个uint,依次存储到uint数组/// 2、附加0x80作为最后一个字节/// 3、在uint数组最后位置记录文件字节长度信息/// </summary>public static uint[] To16Array(FileInfo info){FileStream fs = new FileStream(info.FullName, FileMode.Open);// 读取方式打开,得到流int SIZE = 1024 * 1024 * 50;        // 50M缓存byte[] datas = new byte[SIZE];      // 要读取的内容会放到这个数组里int countI = 0;long offset = 0;// 计算FileLen对应的uint长度(要求为16的倍数、预留2个uint、最小为16)uint FileLen = (uint)info.Length;uint ArrayLen = (((FileLen + 8) / 64) + 1) * 16;     uint[] Array = new uint[ArrayLen];int pos = 0;uint ByteCount = 0;uint ArrayPos = 0;while (ByteCount < FileLen){if (countI == 0){fs.Seek(offset, SeekOrigin.Begin);// 定位到指定字节fs.Read(datas, 0, datas.Length);offset += SIZE;}// 每4个Byte转化为1个uintArrayPos = ByteCount / 4;pos = (int)(ByteCount % 4) * 8;Array[ArrayPos] = Array[ArrayPos] | ((uint)datas[countI] << pos);ByteCount = ByteCount + 1;countI++;if (countI == SIZE) countI = 0;}// 附加0x80作为最后一个字节,添加到uint数组对应位置ArrayPos = ByteCount / 4;pos = (int)(ByteCount % 4) * 8;Array[ArrayPos] = Array[ArrayPos] | ((uint)0x80 << pos);// 记录总长度信息Array[ArrayLen - 2] = (FileLen<< 3);Array[ArrayLen - 1] = (FileLen>>29);fs.Close();return Array;}private static uint F(uint x, uint y, uint z){return (x & y) | ((~x) & z);}private static uint G(uint x, uint y, uint z){return (x & z) | (y & (~z));}// 0^0^0 = 0// 0^0^1 = 1// 0^1^0 = 1// 0^1^1 = 0// 1^0^0 = 1// 1^0^1 = 0// 1^1^0 = 0// 1^1^1 = 1private static uint H(uint x, uint y, uint z){return (x ^ y ^ z);}private static uint I(uint x, uint y, uint z){return (y ^ (x | (~z)));}// 循环左移private static uint RL(uint x, int y){y = y % 32;return (x << y) | (x >> (32 - y));}private static void md5_FF(ref uint a, uint b, uint c, uint d, uint x, int s, uint ac){uint f = F(b, c, d);a = x + ac + a + f;a = RL(a, s);a = a + b;}private static void md5_GG(ref uint a, uint b, uint c, uint d, uint x, int s, uint ac){uint g = G(b, c, d);a = x + ac + a + g;a = RL(a, s);a = a + b;}private static void md5_HH(ref uint a, uint b, uint c, uint d, uint x, int s, uint ac){uint h = H(b, c, d);a = x + ac + a + h;a = RL(a, s);a = a + b;}private static void md5_II(ref uint a, uint b, uint c, uint d, uint x, int s, uint ac){uint i = I(b, c, d);a = x + ac + a + i;a = RL(a, s);a = a + b;}private static string RHex(uint n){string S = Convert.ToString(n, 16);return ReOrder(S);}// 16进制串重排序 67452301 -> 01234567private static string ReOrder(String S){string T = "";for (int i = S.Length - 2; i >= 0; i = i - 2){if (i == -1) T = T + "0" + S[i + 1];else T = T + "" + S[i] + S[i + 1];}return T;}/// <summary>/// 对长度为16倍数的uint数组,执行md5数据摘要,输出md5信息/// </summary>public static string calculate(uint[] x){//uint time1 = DateTime.Now.Ticks;// 7   12  17   22// 5   9   14   20// 4   11  16   23// 6   10  15   21const int S11 = 7;const int S12 = 12;const int S13 = 17;const int S14 = 22;const int S21 = 5;const int S22 = 9;const int S23 = 14;const int S24 = 20;const int S31 = 4;const int S32 = 11;const int S33 = 16;const int S34 = 23;const int S41 = 6;const int S42 = 10;const int S43 = 15;const int S44 = 21;uint a = 0x67452301;uint b = 0xEFCDAB89;uint c = 0x98BADCFE;uint d = 0x10325476;for (int k = 0; k < x.Length; k += 16){uint AA = a;uint BB = b;uint CC = c;uint DD = d;md5_FF(ref a, b, c, d, x[k + 0], S11, 0xD76AA478);  // 3604027302md5_FF(ref d, a, b, c, x[k + 1], S12, 0xE8C7B756);  // 877880356md5_FF(ref c, d, a, b, x[k + 2], S13, 0x242070DB);  // 2562383102md5_FF(ref b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);md5_FF(ref a, b, c, d, x[k + 4], S11, 0xF57C0FAF);md5_FF(ref d, a, b, c, x[k + 5], S12, 0x4787C62A);md5_FF(ref c, d, a, b, x[k + 6], S13, 0xA8304613);md5_FF(ref b, c, d, a, x[k + 7], S14, 0xFD469501);md5_FF(ref a, b, c, d, x[k + 8], S11, 0x698098D8);md5_FF(ref d, a, b, c, x[k + 9], S12, 0x8B44F7AF);md5_FF(ref c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);md5_FF(ref b, c, d, a, x[k + 11], S14, 0x895CD7BE);md5_FF(ref a, b, c, d, x[k + 12], S11, 0x6B901122);md5_FF(ref d, a, b, c, x[k + 13], S12, 0xFD987193);md5_FF(ref c, d, a, b, x[k + 14], S13, 0xA679438E);md5_FF(ref b, c, d, a, x[k + 15], S14, 0x49B40821); //3526238649md5_GG(ref a, b, c, d, x[k + 1], S21, 0xF61E2562);md5_GG(ref d, a, b, c, x[k + 6], S22, 0xC040B340);  //1572812400md5_GG(ref c, d, a, b, x[k + 11], S23, 0x265E5A51);md5_GG(ref b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);md5_GG(ref a, b, c, d, x[k + 5], S21, 0xD62F105D);md5_GG(ref d, a, b, c, x[k + 10], S22, 0x2441453);md5_GG(ref c, d, a, b, x[k + 15], S23, 0xD8A1E681);md5_GG(ref b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);md5_GG(ref a, b, c, d, x[k + 9], S21, 0x21E1CDE6);md5_GG(ref d, a, b, c, x[k + 14], S22, 0xC33707D6);md5_GG(ref c, d, a, b, x[k + 3], S23, 0xF4D50D87);md5_GG(ref b, c, d, a, x[k + 8], S24, 0x455A14ED);md5_GG(ref a, b, c, d, x[k + 13], S21, 0xA9E3E905);md5_GG(ref d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);md5_GG(ref c, d, a, b, x[k + 7], S23, 0x676F02D9);md5_GG(ref b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);md5_HH(ref a, b, c, d, x[k + 5], S31, 0xFFFA3942);  // 3750198684 2314002400 1089690627 990001115 0 4 -> 2749600077md5_HH(ref d, a, b, c, x[k + 8], S32, 0x8771F681);  // 990001115md5_HH(ref c, d, a, b, x[k + 11], S33, 0x6D9D6122); // 1089690627md5_HH(ref b, c, d, a, x[k + 14], S34, 0xFDE5380C); // 2314002400md5_HH(ref a, b, c, d, x[k + 1], S31, 0xA4BEEA44);  // 555633090md5_HH(ref d, a, b, c, x[k + 4], S32, 0x4BDECFA9);md5_HH(ref c, d, a, b, x[k + 7], S33, 0xF6BB4B60);md5_HH(ref b, c, d, a, x[k + 10], S34, 0xBEBFBC70);md5_HH(ref a, b, c, d, x[k + 13], S31, 0x289B7EC6);md5_HH(ref d, a, b, c, x[k + 0], S32, 0xEAA127FA);md5_HH(ref c, d, a, b, x[k + 3], S33, 0xD4EF3085);md5_HH(ref b, c, d, a, x[k + 6], S34, 0x4881D05);md5_HH(ref a, b, c, d, x[k + 9], S31, 0xD9D4D039);md5_HH(ref d, a, b, c, x[k + 12], S32, 0xE6DB99E5);md5_HH(ref c, d, a, b, x[k + 15], S33, 0x1FA27CF8);md5_HH(ref b, c, d, a, x[k + 2], S34, 0xC4AC5665);  // 1444303940md5_II(ref a, b, c, d, x[k + 0], S41, 0xF4292244);  // 808311156md5_II(ref d, a, b, c, x[k + 7], S42, 0x432AFF97);md5_II(ref c, d, a, b, x[k + 14], S43, 0xAB9423A7);md5_II(ref b, c, d, a, x[k + 5], S44, 0xFC93A039);md5_II(ref a, b, c, d, x[k + 12], S41, 0x655B59C3);md5_II(ref d, a, b, c, x[k + 3], S42, 0x8F0CCC92);md5_II(ref c, d, a, b, x[k + 10], S43, 0xFFEFF47D);md5_II(ref b, c, d, a, x[k + 1], S44, 0x85845DD1);md5_II(ref a, b, c, d, x[k + 8], S41, 0x6FA87E4F);md5_II(ref d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);md5_II(ref c, d, a, b, x[k + 6], S43, 0xA3014314);md5_II(ref b, c, d, a, x[k + 13], S44, 0x4E0811A1);md5_II(ref a, b, c, d, x[k + 4], S41, 0xF7537E82);md5_II(ref d, a, b, c, x[k + 11], S42, 0xBD3AF235);md5_II(ref c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);md5_II(ref b, c, d, a, x[k + 9], S44, 0xEB86D391);  // 4120542881a = a + AA; //3844921825b = b + BB;c = c + CC;d = d + DD;}string MD5 = RHex(a) + RHex(b) + RHex(c) + RHex(d);//uint time2 = DateTime.Now.Ticks;//MessageBox.Show("MD5计算耗时:" + ((time2 - time1) / 10000000f) + "秒");return MD5;}#endregion}
}

C# MD5加密源码相关推荐

  1. java字节码文件加密_java 字节码加密源码

    java 字节码加密源码 java 2021-2-16 下载地址 https://www.codedown123.com/73152.html java 字节码加密源码,实现对class加密解密 资源 ...

  2. m3u8链接加密源码

    文章目录 前言 一.m3u8链接加密源码 二.程序演示与下载 1.程序演示 2.程序下载 前言 m3u8是苹果公司推出的视频播放标准,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地 ...

  3. 最新首途影视视频网站源码/二十二套带后台版全开源无加密源码

    源码简介: 最新首途二十二套带后台版全开源无加密源码 菜单填写格式:MyTheme主题,/template/mytheme/admin/默认账号:admin默认密码:admin 下载链接 网盘源码  ...

  4. 实用的网页加密源码,附四种模板风格

    源代码地址:今天给大家免费分享一款网页加密源码 附带了4总风格模板 源代码地址:页面加密.zip - 蓝奏云

  5. 最新实用的网页加密源码+附四套模板

    正文: 今天给大家分享一款网页加密源码 附带了4总风格模板 统一密码:666 相关信息修改MkEncrypt.php 加密连接修改index.php 程序: wwfwd.lanzouj.com/i3F ...

  6. 最新个人发卡系统全开源无加密源码 无限制版

    最新个人发卡系统全开源无加密源码 无限制版 下载地址

  7. php md5加密算法源码,MD5加密和哈希算法

    MD5加密算法为现在应用最广泛的哈希算法之一,该算法广泛应用于互联网网站的用户文件加密,能够将用户密码加密为128位的长整数.数据库并不明文存储用户密码,而是在用户登录时将输入密码字符串进行MD5加密 ...

  8. OC Extension RSA加密(源码)(视频)

    一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹.靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希 ...

  9. net reactor加密源码保软件安全-net reactor使用教程

    还是那句话,用工具加密不能绝对确保软件安全,却能阻大多数人破解出软件的源代码,在一定程序上确保软件安全. Eziriz .NET Reactor 的主要功能包括:NecroBit IL(转为非托管代码 ...

最新文章

  1. pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动标准差(rolling std)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额标准差
  2. flex java 全局拦截_flex + java 过滤敏感词
  3. Jenkins配置基于角色的项目权限管理--转
  4. electron调试html,electron桌面应用程序开发入门
  5. thinkPHP学习笔记
  6. Pandas库(3):DataFrame的条件过滤用法
  7. export TERM=xterm导致终端reset命令失效
  8. 2c语言程序设计_大学生学C语言的理由是什么
  9. [C/C++] String Reverse 字符串 反转
  10. 大数据开发笔记(四):Hive数仓调优
  11. keras提取模型中的某一层_Keras做图片分类(四):迁移学习--猫狗大战实战
  12. php yof框架特点_PHP编程语言的特点
  13. 面经个人向(算法岗)
  14. 计算机测色的基本原理,计算机测色和配色.doc
  15. 小红书标签怎么添加?小红书标签对作品有什么影响
  16. 平滑处理--拉普拉斯(Laplace Smoothing)
  17. Libgdx介绍及环境安装
  18. 如何干净彻底的卸载SQL server2008
  19. 中间件 东方通tongweb的使用
  20. Argox-ME-2140打印机操作注意事项

热门文章

  1. 计算机视觉技术在图像特征提取中的应用研究,彩色图像特征提取研究(一)
  2. nodejs生成图片验证码
  3. 酷狗java秋招笔试题
  4. Linux学习笔记【BV1zL411T7YY】
  5. MySQL 主键详解
  6. 学习前端D1(打鸡血中)
  7. 计算机学院研发第二轮考核-------浏览器之无图模式
  8. 拉普拉斯变换笔记(2)
  9. MySQL中的几种日志文件
  10. 个人小程序接入支付解决方案