`
061041033
  • 浏览: 38697 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

MD5加密通用类

阅读更多
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加密工具类

    通用的MD5加密工具类,可以用于密码加密,可以使用私钥,加强加密的强度,让别人无法破解

    C++ 实现 MD5加密 非常好用

    在C++中实现MD5加密,主要涉及以下几个关键步骤和知识点: 1. **MD5算法的基本流程**: - 分块:MD5处理的消息被分为512位(64字节)的块。 - 初始化:使用一组初始值初始化四个32位的变量A、B、C和D。 - 扩展...

    java-MD5加密类

    java-MD5加密类,只有单加密,不能解密是项目工程中一种简单的加密方法

    spark-md5-js中通用的md5加密

    Spark-md5是一个用JavaScript编写的快速、高效的md5库。它根据MD5算法,将输入的任意长度的明文,经过一系列的操作,转换成一个128位(16字节)的密文。 Spark-md5实现了在浏览器中对文件进行哈希计算,并且在上传...

    MD5加密java和android通用

    在Java中,MD5加密通常通过`java.security.MessageDigest`类实现。以下是一个简单的Java MD5加密示例: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public ...

    MD5加密算法C++源代码

    C++实现MD5加密时,你需要创建一个MD5类,该类可以接受字节序列并逐步执行上述步骤。你可能需要定义一些辅助函数来执行位操作,以及处理32位整数的加法和异或。最后,将得到的128位摘要转换为32位的十六进制字符串,...

    MD5加密小写(16位与32位)通用ASP源码

    MD516位与32位不可逆加密,调用示例如下: &lt;--#include file="md5.asp"--&gt; Pass1 = MD5(Password,16) '16位加密 Pass2 = MD5(Password,32) '32位加密 %&gt;

    MD5.rar_加密

    下面是一个简单的MD5加密通用代码示例: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Formatter; public class MD5 { public static String ...

    VB.net中两种方法实现MD5加密

    这种方法直接利用了 .NET Framework 提供的 `System.Security.Cryptography` 命名空间下的 `MD5CryptoServiceProvider` 类来完成 MD5 加密操作。以下是具体的实现步骤: 1. **引入命名空间**: ```vbnet Imports ...

    通用的MD5加密解密方法

    2. **C#中的MD5类库**:在C#中,`System.Security.Cryptography`命名空间提供了`MD5`类,我们可以利用这个类来实现MD5的加密操作。例如,可以创建一个MD5实例,然后使用`ComputeHash()`方法对输入的数据进行哈希运算...

    MD5密码加密文档

    `PwdEncoder.java`可能是另一个通用的密码编码接口或抽象类,它定义了密码编码的基本操作,而`Md5PwdEncoder`可能是实现这个接口的具体类。这样的设计遵循了面向对象编程中的"接口隔离原则",使得系统更易于扩展和...

    MD5加密算法C++实现

    在C++中实现MD5加密算法涉及到对原始数据进行特定的数学运算和位操作,生成一个128位(通常以32个十六进制数字表示)的唯一标识。 以下是对MD5加密算法的关键步骤和C++实现细节的详细介绍: 1. **初始化**: MD5...

    Delphi md5加密单元及DEMO.rar_DEMO_Delphi md5加密单元及DEMO_delphi md5_delp

    4. **Tools.dcu**:可能包含了辅助工具或通用函数,如字符串操作、文件处理等,这些可能在MD5加密过程中有用。 5. **md5_test_main.ddp**:这是Delphi项目的项目文件,记录了项目的配置信息,如源文件、编译选项等...

    MD5加密算法:js,asp,java,jsp,jquery多种版本的md5写法

    Java提供了java.security.MessageDigest类来实现MD5加密: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Example { public static String ...

    md5加密算法(JS和C++实现).zip

    这个压缩包"md5加密算法(JS和C++实现)"包含了两种语言的MD5实现,使得开发者可以对比理解这两种语言在处理相同算法时的不同方式。在Windows平台上,还提供了可执行文件,这可能是将C++编译的MD5程序打包成的,用户...

    C# MD5加密算法

    回到C#语言环境下的MD5加密实现,我们可以看到在给定的代码片段中,程序员利用了.NET Framework提供的`System.Security.Cryptography`命名空间下的`MD5CryptoServiceProvider`类来实现MD5加密功能。下面是对这段代码...

    可以直接调用的c++实现的MD5加密算法函数

    在这个案例中,提供的"可以直接调用的c++实现的MD5加密算法函数"应该是一个经过验证的、可以直接集成到其他C++项目中的MD5计算模块。这种函数通常会包含以下几个关键部分: 1. **初始化**: 初始化MD5状态变量。MD5...

    visual c++ md5加密算法完整源代码.zip

    3. `main.cpp`:主程序入口,用于测试MD5加密算法的实现,通常会有一个简单的示例来演示如何使用MD5类或函数。 4. `MD5.dsp`:这是Visual Studio早期版本的项目文件,用于构建和管理项目。 5. `MD5.dsw`:Visual ...

    java接口 参数MD5加密.zip

    这个类通常包含MD5加密的核心方法,如`toMD5(String input)`,它接收一个字符串作为输入,通过MD5算法计算出其对应的128位哈希值,通常以32位的16进制字符串形式返回。MD5Utils还可能包括其他辅助方法,如将二进制...

    ASP版hmac和md5加密函数,支持中文,带unicode和utf8转码

    上次曾经传过一个易宝、支付宝、财付通、云网等多用MD5加密程序。 易宝是采用hmac的MD5加密,提供的ASP版函数不支持中文,使用dll注册那个兼容又不太好。 上次我发布的加密程序也不支持中文,且支付宝那个加密函数是...

Global site tag (gtag.js) - Google Analytics