热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

三种MD5加解密算法

首先有一个枚举用来判断用什么那种MD5加密MD5加密位数publicenumMD5_Type{32位MD5算法


首先有一个枚举用来判断用什么那种MD5加密


///

/// MD5 加密位数/// public enum MD5_Type{/// /// 32位MD5算法/// MD5_32BIT,/// /// 64位MD5算法/// MD5_64BIT}



这里是MD5加密算法


///

/// 加解密工具包/// public sealed class MD5_Cryptography{private const int BITS_TO_A_BYTE &#61; 8;private const int BYTES_TO_A_WORD &#61; 4;private const int BITS_TO_A_WORD &#61; 32;private static long[] m_lOnBits &#61; new long[30 &#43; 1];private static long[] m_l2Power &#61; new long[30 &#43; 1];#region --- MD5 标准加密 32Bit加密 64Bit加密 Begin ---/// /// 标准MD5加密/// 应用于密码相关加密/// /// 需要加密的字符串/// 返回加密后的字符串/// /// /// /// /// public static string MD5Encrypt(string str){MD5 md5 &#61; new MD5CryptoServiceProvider();//将字符编码为一个字节序列byte[] data &#61; System.Text.Encoding.Default.GetBytes(str);//计算data字节数组的哈希值 byte[] md5data &#61; md5.ComputeHash(data);md5.Clear();string temp &#61; string.Empty;for (int i &#61; 0; i /// 32位 或者 64位 MD5加密/// 应用于密码相关加密 /// /// 需要加密的字符串/// 加密类型/// 返回加密后的字符串public static string MD5Encrypt(string str, MD5_Type type){string MD5 &#61; "";for (int i &#61; 0; i <&#61; 30; i&#43;&#43;){m_lOnBits[i] &#61; Convert.ToInt64(Math.Pow(2, i &#43; 1) - 1);m_l2Power[i] &#61; Convert.ToInt64(Math.Pow(2, i));}long[] x &#61; null;int k &#61; 0;long AA &#61; 0;long BB &#61; 0;long CC &#61; 0;long DD &#61; 0;long a &#61; 0;long b &#61; 0;long c &#61; 0;long d &#61; 0;const int S11 &#61; 7;const int S12 &#61; 12;const int S13 &#61; 17;const int S14 &#61; 22;const int S21 &#61; 5;const int S22 &#61; 9;const int S23 &#61; 14;const int S24 &#61; 20;const int S31 &#61; 4;const int S32 &#61; 11;const int S33 &#61; 16;const int S34 &#61; 23;const int S41 &#61; 6;const int S42 &#61; 10;const int S43 &#61; 15;const int S44 &#61; 21;x &#61; convertToWordArray(str);a &#61; 0x67452301;b &#61; 0xEFCDAB89;c &#61; 0x98BADCFE;d &#61; 0x10325476;for (k &#61; 0; k 31){// Err.Raise 6;}}}if (Convert.ToBoolean((lValue & m_l2Power[31 - iShiftBits]))){LShift &#61; ((lValue & m_lOnBits[31 - (iShiftBits &#43; 1)]) * m_l2Power[iShiftBits]) | 0x80000000;}else{LShift &#61; ((lValue & m_lOnBits[31 - iShiftBits]) * m_l2Power[iShiftBits]);}return LShift;}private static long rShift(long lValue, long iShiftBits){long RShift &#61; 0;if (iShiftBits &#61;&#61; 0){RShift &#61; lValue;return RShift;}else{if (iShiftBits &#61;&#61; 31){if (Convert.ToBoolean(lValue & 0x80000000)){RShift &#61; 1;}else{RShift &#61; 0;}return RShift;}else{if (iShiftBits <0 || iShiftBits > 31){// Err.Raise 6;}}}RShift &#61; (lValue & 0x7FFFFFFE) / m_l2Power[iShiftBits];if (Convert.ToBoolean((lValue & 0x80000000))){RShift &#61; (RShift | (0x40000000 / m_l2Power[iShiftBits - 1]));}return RShift;}private static long rotateLeft(long lValue, long iShiftBits){long RotateLeft &#61; 0;RotateLeft &#61; lShift(lValue, iShiftBits) | rShift(lValue, (32 - iShiftBits));return RotateLeft;}private static long addUnsigned(long lX, long lY){long AddUnsigned &#61; 0;long lX4 &#61; 0;long lY4 &#61; 0;long lX8 &#61; 0;long lY8 &#61; 0;long lResult &#61; 0;lX8 &#61; lX & 0x80000000;lY8 &#61; lY & 0x80000000;lX4 &#61; lX & 0x40000000;lY4 &#61; lY & 0x40000000;lResult &#61; (lX & 0x3FFFFFFF) &#43; (lY & 0x3FFFFFFF);if (Convert.ToBoolean(lX4 & lY4)){lResult &#61; lResult ^ 0x80000000 ^ lX8 ^ lY8;}else if (Convert.ToBoolean(lX4 | lY4)){if (Convert.ToBoolean(lResult & 0x40000000)){lResult &#61; lResult ^ 0xC0000000 ^ lX8 ^ lY8;}else{lResult &#61; lResult ^ 0x40000000 ^ lX8 ^ lY8;}}else{lResult &#61; lResult ^ lX8 ^ lY8;}AddUnsigned &#61; lResult;return AddUnsigned;}private static long md5_F(long x, long y, long z){long md5_F &#61; 0;md5_F &#61; (x & y) | ((~x) & z);return md5_F;}private static long md5_G(long x, long y, long z){long md5_G &#61; 0;md5_G &#61; (x & z) | (y & (~z));return md5_G;}private static long md5_H(long x, long y, long z){long md5_H &#61; 0;md5_H &#61; (x ^ y ^ z);return md5_H;}private static long md5_I(long x, long y, long z){long md5_I &#61; 0;md5_I &#61; (y ^ (x | (~z)));return md5_I;}private static void md5_FF(ref long a, long b, long c, long d, long x, long s, long ac){a &#61; addUnsigned(a, addUnsigned(addUnsigned(md5_F(b, c, d), x), ac));a &#61; rotateLeft(a, s);a &#61; addUnsigned(a, b);}private static void md5_GG(ref long a, long b, long c, long d, long x, long s, long ac){a &#61; addUnsigned(a, addUnsigned(addUnsigned(md5_G(b, c, d), x), ac));a &#61; rotateLeft(a, s);a &#61; addUnsigned(a, b);}private static void md5_HH(ref long a, long b, long c, long d, long x, long s, long ac){a &#61; addUnsigned(a, addUnsigned(addUnsigned(md5_H(b, c, d), x), ac));a &#61; rotateLeft(a, s);a &#61; addUnsigned(a, b);}private static void md5_II(ref long a, long b, long c, long d, long x, long s, long ac){a &#61; addUnsigned(a, addUnsigned(addUnsigned(md5_I(b, c, d), x), ac));a &#61; rotateLeft(a, s);a &#61; addUnsigned(a, b);}private static long[] convertToWordArray(string sMessage){long[] ConvertToWordArray &#61; null;int lMessageLength &#61; 0;int lNumberOfWords &#61; 0;long[] lWordArray &#61; null;int lBytePosition &#61; 0;int lByteCount &#61; 0;int lWordCount &#61; 0;const int MODULUS_BITS &#61; 512;const int CONGRUENT_BITS &#61; 448;lMessageLength &#61; sMessage.Length;lNumberOfWords &#61; (((lMessageLength &#43; ((MODULUS_BITS - CONGRUENT_BITS) / BITS_TO_A_BYTE)) / (MODULUS_BITS / BITS_TO_A_BYTE)) &#43; 1) * (MODULUS_BITS / BITS_TO_A_WORD);lWordArray &#61; new long[lNumberOfWords];lBytePosition &#61; 0;lByteCount &#61; 0;while (lByteCount 0){strhex &#61; tohex(dec % 16) &#43; strhex;dec &#61; dec / 16;}return strhex;}private static string tohex(long hex){string strhex &#61; "";switch (hex){case 10: strhex &#61; "a"; break;case 11: strhex &#61; "b"; break;case 12: strhex &#61; "c"; break;case 13: strhex &#61; "d"; break;case 14: strhex &#61; "e"; break;case 15: strhex &#61; "f"; break;default: strhex &#61; hex.ToString(); break;}return strhex;}#endregion --- MD5 加密算法 End ---#endregion --- MD5 标准加密 32Bit 64Bit End ---}



其中  public static string MD5Encrypt(string str) 函数是ASP.NET 标准的MD5算法 返回30位的加密后的字符串


另外 public static string MD5Encrypt(string str, MD5_Type type) 通过 32位 或者64位的MD5加密算法











推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 加密世界下一个主流叙事领域:L2、跨链桥、GameFi等
    本文介绍了加密世界下一个主流叙事的七个潜力领域,包括L2、跨链桥、GameFi等。L2作为以太坊的二层解决方案,在过去一年取得了巨大成功,跨链桥和互操作性是多链Web3中最重要的因素。去中心化的数据存储领域也具有巨大潜力,未来云存储市场有望达到1500亿美元。DAO和社交代币将成为购买和控制现实世界资产的重要方式,而GameFi作为数字资产在高收入游戏中的应用有望推动数字资产走向主流。衍生品市场也在不断发展壮大。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
author-avatar
佳臭臭_643
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有