import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.log4j.Logger;
/**
* MD5帮助类
* 生成文件的md5码,和字符串的MD5码
* @author
* @version [version 1.0, 2011-4-8]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class MD5Util
{
/**
* 日志
*/
private static Logger logger = Logger.getLogger(MD5Util.class);
/**
* 默认的密码字符串组合,apache校验下载的文件的正确性用的就是默认的这个组合
*/
protected static char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
/**
* 为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法
*/
protected static MessageDigest messagedigest = null;
static
{
try
{
messagedigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nsaex)
{
logger.error(MD5Util.class.getName()
+ "初始化失败,MessageDigest不支持MD5Util。");
nsaex.printStackTrace();
logger.error(Config.EXCEPTION, nsaex);
}
}
/**
* MAIN方法
* @param args 参数
* @throws IOException IO异常
*/
public static void main(String[] args) throws IOException
{
long begin = System.currentTimeMillis();
File big = new File("d:/fd.tar.gz");
String md5 = getFileMD5String(big);
long end = System.currentTimeMillis();
System.out.println("md5:" + md5 + " time:" + ((end - begin) / 1000)
+ "s");
}
/**
* 不适用于上G大的文件
*
* @param file 文件
* @return 该文件的MD5码
* @throws IOException IO异常
*/
public static String getFileMD5String(File file) throws IOException
{
if(file.isDirectory())
{
return null;
}
FileInputStream in = new FileInputStream(file);
try
{
byte[] buffer = new byte[1024];
int numRead = 0;
while ((numRead = in.read(buffer)) > 0) {
messagedigest.update(buffer, 0, numRead);
}
} finally
{
if(in != null)
{
in.close();
in = null;
}
}
return bufferToHex(messagedigest.digest());
}
/**
* 获取字符串的MD5码
* @param s 字符串
* @return 该字符串的MD5码
*/
public static String getMD5String(String s)
{
return getMD5String(s.getBytes());
}
/**
* 获取字节数组的MD5码
* @param bytes 字节数组
* @return 该字节数组的MD5码
*/
public static String getMD5String(byte[] bytes)
{
messagedigest.update(bytes);
return bufferToHex(messagedigest.digest());
}
private static String bufferToHex(byte[] bytes)
{
return bufferToHex(bytes, 0, bytes.length);
}
private static String bufferToHex(byte[] bytes, int m, int n)
{
StringBuffer stringbuffer = new StringBuffer(2 * n);
int k = m + n;
for (int l = m; l < k; l++)
{
appendHexPair(bytes[l], stringbuffer);
}
return stringbuffer.toString();
}
private static void appendHexPair(byte bt, StringBuffer stringbuffer)
{
char c0 = hexDigits[(bt & 0xf0) >> 4];
char c1 = hexDigits[bt & 0xf];
stringbuffer.append(c0);
stringbuffer.append(c1);
}
/**
* 密码校验
* @param password 密码
* @param md5PwdStr MD5字符串
* @return 相同返回TRUE,否则返回FALSE
*/
public static boolean checkPassword(String password, String md5PwdStr)
{
String s = getMD5String(password);
return s.equals(md5PwdStr);
}
}
分享到:
相关推荐
通用的MD5加密工具类,可以用于密码加密,可以使用私钥,加强加密的强度,让别人无法破解
在C++中实现MD5加密,主要涉及以下几个关键步骤和知识点: 1. **MD5算法的基本流程**: - 分块:MD5处理的消息被分为512位(64字节)的块。 - 初始化:使用一组初始值初始化四个32位的变量A、B、C和D。 - 扩展...
java-MD5加密类,只有单加密,不能解密是项目工程中一种简单的加密方法
Spark-md5是一个用JavaScript编写的快速、高效的md5库。它根据MD5算法,将输入的任意长度的明文,经过一系列的操作,转换成一个128位(16字节)的密文。 Spark-md5实现了在浏览器中对文件进行哈希计算,并且在上传...
在Java中,MD5加密通常通过`java.security.MessageDigest`类实现。以下是一个简单的Java MD5加密示例: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public ...
C++实现MD5加密时,你需要创建一个MD5类,该类可以接受字节序列并逐步执行上述步骤。你可能需要定义一些辅助函数来执行位操作,以及处理32位整数的加法和异或。最后,将得到的128位摘要转换为32位的十六进制字符串,...
MD516位与32位不可逆加密,调用示例如下: <--#include file="md5.asp"--> Pass1 = MD5(Password,16) '16位加密 Pass2 = MD5(Password,32) '32位加密 %>
下面是一个简单的MD5加密通用代码示例: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Formatter; public class MD5 { public static String ...
这种方法直接利用了 .NET Framework 提供的 `System.Security.Cryptography` 命名空间下的 `MD5CryptoServiceProvider` 类来完成 MD5 加密操作。以下是具体的实现步骤: 1. **引入命名空间**: ```vbnet Imports ...
2. **C#中的MD5类库**:在C#中,`System.Security.Cryptography`命名空间提供了`MD5`类,我们可以利用这个类来实现MD5的加密操作。例如,可以创建一个MD5实例,然后使用`ComputeHash()`方法对输入的数据进行哈希运算...
`PwdEncoder.java`可能是另一个通用的密码编码接口或抽象类,它定义了密码编码的基本操作,而`Md5PwdEncoder`可能是实现这个接口的具体类。这样的设计遵循了面向对象编程中的"接口隔离原则",使得系统更易于扩展和...
在C++中实现MD5加密算法涉及到对原始数据进行特定的数学运算和位操作,生成一个128位(通常以32个十六进制数字表示)的唯一标识。 以下是对MD5加密算法的关键步骤和C++实现细节的详细介绍: 1. **初始化**: MD5...
4. **Tools.dcu**:可能包含了辅助工具或通用函数,如字符串操作、文件处理等,这些可能在MD5加密过程中有用。 5. **md5_test_main.ddp**:这是Delphi项目的项目文件,记录了项目的配置信息,如源文件、编译选项等...
Java提供了java.security.MessageDigest类来实现MD5加密: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Example { public static String ...
这个压缩包"md5加密算法(JS和C++实现)"包含了两种语言的MD5实现,使得开发者可以对比理解这两种语言在处理相同算法时的不同方式。在Windows平台上,还提供了可执行文件,这可能是将C++编译的MD5程序打包成的,用户...
回到C#语言环境下的MD5加密实现,我们可以看到在给定的代码片段中,程序员利用了.NET Framework提供的`System.Security.Cryptography`命名空间下的`MD5CryptoServiceProvider`类来实现MD5加密功能。下面是对这段代码...
在这个案例中,提供的"可以直接调用的c++实现的MD5加密算法函数"应该是一个经过验证的、可以直接集成到其他C++项目中的MD5计算模块。这种函数通常会包含以下几个关键部分: 1. **初始化**: 初始化MD5状态变量。MD5...
3. `main.cpp`:主程序入口,用于测试MD5加密算法的实现,通常会有一个简单的示例来演示如何使用MD5类或函数。 4. `MD5.dsp`:这是Visual Studio早期版本的项目文件,用于构建和管理项目。 5. `MD5.dsw`:Visual ...
这个类通常包含MD5加密的核心方法,如`toMD5(String input)`,它接收一个字符串作为输入,通过MD5算法计算出其对应的128位哈希值,通常以32位的16进制字符串形式返回。MD5Utils还可能包括其他辅助方法,如将二进制...
上次曾经传过一个易宝、支付宝、财付通、云网等多用MD5加密程序。 易宝是采用hmac的MD5加密,提供的ASP版函数不支持中文,使用dll注册那个兼容又不太好。 上次我发布的加密程序也不支持中文,且支付宝那个加密函数是...