langchenglc
1/7/2019 - 6:19 AM

MD5Utils.java

MD5Utils.java

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class MD5Utils {
    private static String[] hexDigits = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};

    public MD5Utils() {
    }

    private static String md5(String data) throws NoSuchAlgorithmException, UnsupportedEncodingException {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] b = data.getBytes("UTF8");
        md5.update(b, 0, b.length);
        return byteArrayToHexString(md5.digest());
    }

    private static String byteArrayToHexString(byte[] b) {
        StringBuffer sb = new StringBuffer();

        for (int i = 0; i < b.length; ++i) {
            sb.append(byteToHexString(b[i]));
        }

        return sb.toString();
    }

    private static String byteToHexString(byte b) {
        int n = b;
        if (b < 0) {
            n = 256 + b;
        }

        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }

    public static String genMd5(String msg) {
        String messageDigest = null;

        try {
            messageDigest = md5(msg);
            return messageDigest;
        } catch (Exception var3) {
            var3.printStackTrace();
            throw new RuntimeException("Md5 Error. Cause: " + var3);
        }
    }

    public static String genB2bMd5(Map<String, String> map) {
        List<String> md5List = new ArrayList();
        String md5Str = "";
        String separation = ":";
        Iterator i$ = map.entrySet().iterator();

        while (true) {
            String name;
            String value;
            do {
                do {
                    do {
                        if (!i$.hasNext()) {
                            Object[] md5Array = md5List.toArray();
                            Arrays.sort(md5Array);

                            for (int i = 0; i < md5Array.length; ++i) {
                                md5Str = md5Str + md5Array[i];
                                if (i != md5Array.length - 1) {
                                    md5Str = md5Str + separation;
                                }
                            }

                            return genMd5(md5Str);
                        }

                        Map.Entry<String, String> entry = (Map.Entry) i$.next();
                        name = (String) entry.getKey();
                        value = (String) entry.getValue();
                    } while ("transactionType".equalsIgnoreCase(name));
                } while ("checksum".equalsIgnoreCase(name));
            } while ("multiplierFlag".equalsIgnoreCase(name) && !"1".equalsIgnoreCase(value));

            md5List.add(name + "=" + value);
        }
    }
}