MD5加密算法

本文详细介绍了MD5加密算法的基本原理、实现方式及在实际应用中的使用方法,包括字符串加密、文件加密等场景。重点阐述了如何通过Java实现MD5加密,以及如何验证加密后的密文是否正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MD5加密

用于md5加密的class

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
    protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6',
            '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
    protected static MessageDigest messagedigest = null;
    static {
        try {
            messagedigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException nsaex) {
            nsaex.printStackTrace();
        }
    }
    /** 
     * @Title: encryptionPasswordToMD5 
     * @author zhzh
     * @date 
     * @version V1.0  
     * @Description: 通过MD5加密,并且字母转换成大写
     * @param : 
     * @return String
     * @throws 
     */ 
    public static String encryptionPasswordToMD5(String str){
        return toMD5(str).toUpperCase();
    }
    private static String toMD5(String s) {
        s = s == null ? "" : s;
        String strRet = null;
        try {
            byte[] strTemp = s.getBytes();
            messagedigest.update(strTemp);
            byte[] md = messagedigest.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte b = md[i];
                str[k++] = hexDigits[b >>> 4 & 0xf];
                str[k++] = hexDigits[b & 0xf];
            }
            strRet = new String(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return strRet;
    }

    public static void main(String[] args) {
        System.out.println(toMD5("XSK0609.xjx"));
        System.out.println(encryptionPasswordToMD5("XSK0609.xjx"));
//      System.out.println(toMD5("1"));
//      System.out.println("admin:\t" + toMD5("admin"));
//      System.out.println("1:\t" + toMD5("1"));
//      System.out.println("123456:\t" + toMD5("123456"));
//      System.out.println(":\t" + toMD5(""));
//      System.out.println("null:\t" + toMD5(null));
//      System.out.println("test1:\t" + toMD5("test1"));
//      System.out.println("test2:\t" + toMD5("test2"));
//      System.out.println("ghccing9119:\t" + toMD5("ghccing9119"));
//      System.out.println("ghccing119:\t" + toMD5("ghccing119"));
    }
    public static String getFileMD5String(File file) throws IOException {
        FileInputStream in = new FileInputStream(file);
        FileChannel ch = in.getChannel();
        MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0,
                file.length());
        messagedigest.update(byteBuffer);
        return bufferToHex(messagedigest.digest());
    }

    public static String getMD5String(String s) {
        return getMD5String(s.getBytes());
    }

    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);
    }

    public static boolean checkPassword(String password, String md5PwdStr) {
        String s = getMD5String(password);
        return s.equals(md5PwdStr);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值