MD5加密是一种国际上比较常用的加密算法
虽然MD5加密算法已经被我国王小云教授给破解了,但是对一般的加密需求而言还是足够了的,
首先是MD5加密算法的JAVA实现
一个MD5加密的具体例子,很简单
虽然MD5加密算法已经被我国王小云教授给破解了,但是对一般的加密需求而言还是足够了的,
首先是MD5加密算法的JAVA实现
package test; public class MD5 { private static MD5 md5; private long m_buf[]; private long m_bits[]; private byte m_in[]; private char HEX[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; private MD5() { m_buf = new long[4]; m_bits = new long[2]; m_in = new byte[64]; } public static MD5 getInstance() { if (md5 == null) md5 = new MD5(); return md5; } public String toDigest(String src) { byte digest[] = toDigest(src.getBytes()); StringBuffer sb = new StringBuffer(); for (int i = 0; i < digest.length; i++) { sb.append(HEX[(digest[i] & 0xff) / 16]); sb.append(HEX[(digest[i] & 0xff) % 16]); } return sb.toString(); } public byte[] toDigest(byte src[]) { byte digest[] = new byte[16]; int len = src.length; MD5Init(); MD5Update(src, len); MD5Final(digest); return digest; } private void memset(byte des[], int des_offset, byte dat, int len) { for (int i = 0; i < len; i++) des[des_offset + i] = dat; } private void memset(long des[], int des_offset, long dat, int len) { for (int i = 0; i < len; i++) des[des_offset + i] = dat; } private void memcpy(byte des[], int des_offset, byte src[], int src_offset, int len) { for (int i = 0; i < len; i++) des[des_offset + i] = src[src_offset + i]; } private long bp2long(byte src[], int offset_lng) { long ret = 0L; ret = (long) src[offset_lng * 4 + 0] & 255L | (long) (src[offset_lng * 4 + 1] << 8) & 65280L | (long) (src[offset_lng * 4 + 2] << 16) & 0xff0000L | (long) (src[offset_lng * 4 + 3] << 24) & 0xff000000L; return ret & 0xffffffffL; } private void MD5Init() { m_buf[0] = 0x67452301L; m_buf[1] = 0xefcdab89L; m_buf[2] = 0x98badcfeL; m_buf[3] = 0x10325476L; m_bits[0] = 0L; m_bits[1] = 0L; } private void MD5Update(byte buf[], int len) { long t = m_bits[0]; m_bits[0] = t + (long) (len << 3); if (m_bits[0] < t) m_bits[1]++; m_bits[1] = m_bits[1] + (long) (len >> 29); t = t >> 3 & 63L; if (t != 0L) { long p = t; t = (long) 64 - t & 0xffffffffL; if ((long) len < t) { memcpy(m_in, (int) t, buf, 0, len); return; } memcpy(m_in, (int) t, buf, 0, (int) t); MD5Transform(); len = (int) ((long) len - t); } for (; len >= 64; len -= 64) { memcpy(m_in, 0, buf, (int) t, 64); MD5Transform(); t += 64; } memcpy(m_in, 0, buf, (int) t, len); } private void MD5Final(byte digest[]) { long count = m_bits[0] >> 3 & 63L; m_in[(int) count] = -128; long p = count + (long) 1; count = (long) 63 - count; if (count < (long) 8) { memset(m_in, (int) p, (byte) 0, (int) count); MD5Transform(); memset(m_in, 0, (byte) 0, 56); } else { memset(m_in, (int) p, (byte) 0, (int) (count - (long) 8)); } m_in[56] = (byte) (int) (m_bits[0] & (long) 255); m_in[57] = (byte) (int) (m_bits[0] >> 8 & (long) 255); m_in[58] = (byte) (int) (m_bits[0] >> 16 & (long) 255); m_in[59] = (byte) (int) (m_bits[0] >> 24 & (long) 255); m_in[60] = (byte) (int) (m_bits[1] & (long) 255); m_in[61] = (byte) (int) (m_bits[1] >> 8 & (long) 255); m_in[62] = (byte) (int) (m_bits[1] >> 16 & (long) 255); m_in[63] = (byte) (int) (m_bits[1] >> 24 & (long) 255); MD5Transform(); for (int i = 0; i < 4; i++) { digest[i * 4 + 0] = (byte) (int) (m_buf[i] & (long) 255); digest[i * 4 + 1] = (byte) (int) (m_buf[i] >> 8 & (long) 255); digest[i * 4 + 2] = (byte) (int) (m_buf[i] >> 16 & (long) 255); digest[i * 4 + 3] = (byte) (int) (m_buf[i] >> 24 & (long) 255); } MD5Init(); } private long F1(long x, long y, long z) { return (z ^ x & (y ^ z)) & 0xffffffffL; } private long F2(long x, long y, long z) { return F1(z, x, y); } private long F3(long x, long y, long z) { return (x ^ y ^ z) & 0xffffffffL; } private long F4(long x, long y, long z) { return (y ^ (x | z ^ 0L - 1L)) & 0xffffffffL; } private long MD5STEP(long w, long f, long x, long y, long z, long data, long s) { w = w + f + data & 0xffffffffL; w = (w << (int) s | w >> (int) ((long) 32 - s)) & 0xffffffffL; w = w + x & 0xffffffffL; return w; } private void MD5Transform() { long a = m_buf[0]; long b = m_buf[1]; long c = m_buf[2]; long d = m_buf[3]; a = MD5STEP(a, F1(b, c, d), b, c, d, bp2long(m_in, 0) + 0xd76aa478L, 7L); d = MD5STEP(d, F1(a, b, c), a, b, c, bp2long(m_in, 1) + 0xe8c7b756L, 12L); c = MD5STEP(c, F1(d, a, b), d, a, b, bp2long(m_in, 2) + 0x242070dbL, 17L); b = MD5STEP(b, F1(c, d, a), c, d, a, bp2long(m_in, 3) + 0xc1bdceeeL, 22L); a = MD5STEP(a, F1(b, c, d), b, c, d, bp2long(m_in, 4) + 0xf57c0fafL, 7L); d = MD5STEP(d, F1(a, b, c), a, b, c, bp2long(m_in, 5) + 0x4787c62aL, 12L); c = MD5STEP(c, F1(d, a, b), d, a, b, bp2long(m_in, 6) + 0xa8304613L, 17L); b = MD5STEP(b, F1(c, d, a), c, d, a, bp2long(m_in, 7) + 0xfd469501L, 22L); a = MD5STEP(a, F1(b, c, d), b, c, d, bp2long(m_in, 8) + 0x698098d8L, 7L); d = MD5STEP(d, F1(a, b, c), a, b, c, bp2long(m_in, 9) + 0x8b44f7afL, 12L); c = MD5STEP(c, F1(d, a, b), d, a, b, bp2long(m_in, 10) + 0xffff5bb1L, 17L); b = MD5STEP(b, F1(c, d, a), c, d, a, bp2long(m_in, 11) + 0x895cd7beL, 22L); a = MD5STEP(a, F1(b, c, d), b, c, d, bp2long(m_in, 12) + 0x6b901122L, 7L); d = MD5STEP(d, F1(a, b, c), a, b, c, bp2long(m_in, 13) + 0xfd987193L, 12L); c = MD5STEP(c, F1(d, a, b), d, a, b, bp2long(m_in, 14) + 0xa679438eL, 17L); b = MD5STEP(b, F1(c, d, a), c, d, a, bp2long(m_in, 15) + 0x49b40821L, 22L); a = MD5STEP(a, F2(b, c, d), b, c, d, bp2long(m_in, 1) + 0xf61e2562L, 5L); d = MD5STEP(d, F2(a, b, c), a, b, c, bp2long(m_in, 6) + 0xc040b340L, 9L); c = MD5STEP(c, F2(d, a, b), d, a, b, bp2long(m_in, 11) + 0x265e5a51L, 14L); b = MD5STEP(b, F2(c, d, a), c, d, a, bp2long(m_in, 0) + 0xe9b6c7aaL, 20L); a = MD5STEP(a, F2(b, c, d), b, c, d, bp2long(m_in, 5) + 0xd62f105dL, 5L); d = MD5STEP(d, F2(a, b, c), a, b, c, bp2long(m_in, 10) + 0x2441453L, 9L); c = MD5STEP(c, F2(d, a, b), d, a, b, bp2long(m_in, 15) + 0xd8a1e681L, 14L); b = MD5STEP(b, F2(c, d, a), c, d, a, bp2long(m_in, 4) + 0xe7d3fbc8L, 20L); a = MD5STEP(a, F2(b, c, d), b, c, d, bp2long(m_in, 9) + 0x21e1cde6L, 5L); d = MD5STEP(d, F2(a, b, c), a, b, c, bp2long(m_in, 14) + 0xc33707d6L, 9L); c = MD5STEP(c, F2(d, a, b), d, a, b, bp2long(m_in, 3) + 0xf4d50d87L, 14L); b = MD5STEP(b, F2(c, d, a), c, d, a, bp2long(m_in, 8) + 0x455a14edL, 20L); a = MD5STEP(a, F2(b, c, d), b, c, d, bp2long(m_in, 13) + 0xa9e3e905L, 5L); d = MD5STEP(d, F2(a, b, c), a, b, c, bp2long(m_in, 2) + 0xfcefa3f8L, 9L); c = MD5STEP(c, F2(d, a, b), d, a, b, bp2long(m_in, 7) + 0x676f02d9L, 14L); b = MD5STEP(b, F2(c, d, a), c, d, a, bp2long(m_in, 12) + 0x8d2a4c8aL, 20L); a = MD5STEP(a, F3(b, c, d), b, c, d, bp2long(m_in, 5) + 0xfffa3942L, 4L); d = MD5STEP(d, F3(a, b, c), a, b, c, bp2long(m_in, 8) + 0x8771f681L, 11L); c = MD5STEP(c, F3(d, a, b), d, a, b, bp2long(m_in, 11) + 0x6d9d6122L, 16L); b = MD5STEP(b, F3(c, d, a), c, d, a, bp2long(m_in, 14) + 0xfde5380cL, 23L); a = MD5STEP(a, F3(b, c, d), b, c, d, bp2long(m_in, 1) + 0xa4beea44L, 4L); d = MD5STEP(d, F3(a, b, c), a, b, c, bp2long(m_in, 4) + 0x4bdecfa9L, 11L); c = MD5STEP(c, F3(d, a, b), d, a, b, bp2long(m_in, 7) + 0xf6bb4b60L, 16L); b = MD5STEP(b, F3(c, d, a), c, d, a, bp2long(m_in, 10) + 0xbebfbc70L, 23L); a = MD5STEP(a, F3(b, c, d), b, c, d, bp2long(m_in, 13) + 0x289b7ec6L, 4L); d = MD5STEP(d, F3(a, b, c), a, b, c, bp2long(m_in, 0) + 0xeaa127faL, 11L); c = MD5STEP(c, F3(d, a, b), d, a, b, bp2long(m_in, 3) + 0xd4ef3085L, 16L); b = MD5STEP(b, F3(c, d, a), c, d, a, bp2long(m_in, 6) + 0x4881d05L, 23L); a = MD5STEP(a, F3(b, c, d), b, c, d, bp2long(m_in, 9) + 0xd9d4d039L, 4L); d = MD5STEP(d, F3(a, b, c), a, b, c, bp2long(m_in, 12) + 0xe6db99e5L, 11L); c = MD5STEP(c, F3(d, a, b), d, a, b, bp2long(m_in, 15) + 0x1fa27cf8L, 16L); b = MD5STEP(b, F3(c, d, a), c, d, a, bp2long(m_in, 2) + 0xc4ac5665L, 23L); a = MD5STEP(a, F4(b, c, d), b, c, d, bp2long(m_in, 0) + 0xf4292244L, 6L); d = MD5STEP(d, F4(a, b, c), a, b, c, bp2long(m_in, 7) + 0x432aff97L, 10L); c = MD5STEP(c, F4(d, a, b), d, a, b, bp2long(m_in, 14) + 0xab9423a7L, 15L); b = MD5STEP(b, F4(c, d, a), c, d, a, bp2long(m_in, 5) + 0xfc93a039L, 21L); a = MD5STEP(a, F4(b, c, d), b, c, d, bp2long(m_in, 12) + 0x655b59c3L, 6L); d = MD5STEP(d, F4(a, b, c), a, b, c, bp2long(m_in, 3) + 0x8f0ccc92L, 10L); c = MD5STEP(c, F4(d, a, b), d, a, b, bp2long(m_in, 10) + 0xffeff47dL, 15L); b = MD5STEP(b, F4(c, d, a), c, d, a, bp2long(m_in, 1) + 0x85845dd1L, 21L); a = MD5STEP(a, F4(b, c, d), b, c, d, bp2long(m_in, 8) + 0x6fa87e4fL, 6L); d = MD5STEP(d, F4(a, b, c), a, b, c, bp2long(m_in, 15) + 0xfe2ce6e0L, 10L); c = MD5STEP(c, F4(d, a, b), d, a, b, bp2long(m_in, 6) + 0xa3014314L, 15L); b = MD5STEP(b, F4(c, d, a), c, d, a, bp2long(m_in, 13) + 0x4e0811a1L, 21L); a = MD5STEP(a, F4(b, c, d), b, c, d, bp2long(m_in, 4) + 0xf7537e82L, 6L); d = MD5STEP(d, F4(a, b, c), a, b, c, bp2long(m_in, 11) + 0xbd3af235L, 10L); c = MD5STEP(c, F4(d, a, b), d, a, b, bp2long(m_in, 2) + 0x2ad7d2bbL, 15L); b = MD5STEP(b, F4(c, d, a), c, d, a, bp2long(m_in, 9) + 0xeb86d391L, 21L); m_buf[0] += a; m_buf[1] += b; m_buf[2] += c; m_buf[3] += d; } }
一个MD5加密的具体例子,很简单
package test; public class TestMD5 { public static void main(String[] args) { String password="123456"; //对password完成MD5加密 String code=MD5.getInstance().toDigest(password); System.out.println(code); } }
发表评论
-
util.date与sql.date之前转换
2010-03-07 14:02 1493我在做一个inser操作的时候 要获取当前时间 存入数据库 就 ... -
runtime打开本地文件(任意的文件 包括音频视频 word pdf等)
2010-01-24 22:25 1516打开本地文件 在windowsxp下完美实现 效果和鼠标双击 ... -
String类型的时间转换为Date类型
2009-07-11 12:19 2112一般得到的时间都是String类型,需要存入数据库时,需要转换 ... -
获取当前系统时间
2009-07-11 12:02 1220简单的获取系统时间的方法 可以根据自己的需要自定义取出时间的 ...
相关推荐
MD5(Message-Digest Algorithm 5)是一种广泛使用的加密散列函数,它产生一个128位(16字节)的散列值,通常以32位十六进制数字的形式表示。MD5常用于验证数据的完整性和保密性,比如在存储密码时。本篇将详细讲解...
MD5加密jar包是将MD5算法封装到Java程序中的库,方便开发者在Java应用中快速实现MD5加密功能。 MD5的特点: 1. **不可逆性**:MD5算法是单向的,即给定一个输入,可以得到一个固定长度的摘要,但不能通过摘要反推出...
在IT领域,尤其是在数据库安全与数据完整性保护方面,MD5加密技术被广泛应用于各种场景,包括用户密码存储、数据校验等。Oracle数据库作为一种企业级的数据库管理系统,提供了多种方式来实现MD5加密,这对于确保数据...
在提供的压缩包文件中,`md5宏.xla`可能包含了一个宏的实现,而`MD5加密2种方式.xlsx`则可能是包含VBA函数或者演示如何使用VBA函数进行MD5加密的Excel工作簿。为了安全起见,使用外部来源的宏时应谨慎,确保其来源...
批量MD5加密工具,如"苏苏MD5批量加密工具.exe",是为了方便用户处理大量文件的MD5计算而设计的。这样的工具通常具有以下功能: 1. **多文件处理**:一次可以处理多个文件,节省了逐个手动计算的时间。 2. **快速...
在标题中提到的“MD5加密工具源码”,是指一个专门用于MD5哈希运算的程序代码。这个工具被设计成一个独立的类,可以方便地对输入数据进行MD5加密,并生成16位的哈希值。默认情况下,该工具会生成大写的哈希字符串,...
在Java中,MD5加密可以通过特定的库或API来实现,这些库或API通常封装了MD5的计算过程,使得开发者能够方便地对字符串或其他数据进行加密。 "Md5加密jar包"可能包含了两种不同的MD5加密实现,这可能是因为每个jar包...
MD5加密算法的VB6.0类模块实例 MD5加密算法是目前广泛使用的一种加密算法,主要用于数据完整性和身份验证。VB6.0是微软公司开发的一种编程语言,广泛应用于Windows操作系统的开发中。该类模块实例将MD5加密算法与VB...
MD5(Message-Digest Algorithm 5)是一种广泛使用...这个"MD5加密demo"提供了一个完整的MD5加密示例,可以帮助初学者快速理解和应用MD5。通过学习和实践,可以更好地理解哈希函数的工作原理,以及在实际项目中的应用。
本主题提供的“windows下MD5加密工具bat文件”是一个基于批处理脚本(.bat)的解决方案,允许用户在没有额外安装软件的情况下进行MD5加密操作。 批处理文件(.bat)是Windows操作系统中的一个特殊文本文件,它可以...
MD5加密广泛应用于各种领域,包括数据存储、网络传输和身份验证等。 在jsp网页中实现MD5加密可以使用JavaBean来实现。MD5类实现了RSA Data Security公司的MD5 message-digest算法。该类中定义了一些静态final变量,...
如果你收到的压缩包文件名为“MD5加密(dos操作)”,里面可能包含一个DOS下的MD5加密指南或者工具,帮助用户理解如何在DOS环境下进行MD5操作。了解这个过程对于理解基础的网络安全和数据完整性概念是非常有价值的,但...
在给定的"MD5加密.zip"文件中,可能包含了一个C#项目(MD5EnPWD.sln),该项目可能实现了一个MD5加密和解密的工具。`.sln`文件是Visual Studio的解决方案文件,它包含了项目的配置信息。`.v11.suo`是用户特定的解决...
PB9.0调用MD5加密是一个常见的编程实践,特别是在数据安全和验证领域。PowerBuilder 9.0(简称PB9.0)是一款强大的客户端-服务器应用程序开发工具,支持多种数据库系统,它允许开发者通过编写代码来实现各种功能,...
MD5(Message-Digest Algorithm 5)作为一种常用的散列算法,在Servlet中实现对数据库中数据的MD5加密是一种常见的安全实践。 ### MD5加密原理 MD5算法是一种广泛使用的散列函数,它可以将任意长度的数据转换为一...
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的数据转化为固定长度的摘要,通常用于数据完整性校验和密码加密。在C#编程语言中,MD5加密也是一项常用的技术。下面我们将深入探讨C#...
2. **Delphi中的MD5库**:在Delphi中,可以使用第三方库如`dcutils`或`md5unit`来实现MD5加密。这些库通常提供了封装好的函数,如`MD5String`或`CalculateMD5`,可以直接接受字符串作为输入,返回MD5哈希值。例如,`...
在易语言中实现MD5加密,意味着使用了易语言提供的内建函数或者第三方库,通过简单的语句就能完成MD5的计算。 不过,需要注意的是,MD5算法由于其存在安全漏洞,已不再适合用于安全性要求高的场景,如密码存储。...
在描述中提到的"MD5加密解密demo",实际上MD5并不具备可逆的加密特性。MD5是一个单向函数,即给定任意输入,可以很容易地计算出固定的输出(摘要),但无法根据输出反推出原始输入。因此,我们通常不会说"MD5解密",...
MD5.DLL是MD5加密算法的一个动态链接库,它封装了MD5的计算逻辑,供应用程序调用。在PowerBuilder中,我们可以通过引入外部DLL的方式来利用这些功能。以下是一个详细的步骤和知识点: 1. **引入MD5.DLL**:在Power...