1. 程式人生 > >常見加密演算法java實現(MD5,SHA-256,SHA-512)

常見加密演算法java實現(MD5,SHA-256,SHA-512)


import org.apache.commons.codec.digest.DigestUtils;

public class PasswordEncode {
    private static String pwdAlgorithm = "MD5";

    /**
     * 加密密碼演算法
     *
     * @param pass
     *            需要加密的原始密碼
     * @param algorithm
     *            加密演算法名稱
     * @return 加密後的密碼
     * @throws NoSuchAlgorithmException
     *             當加密演算法不可用時丟擲此異常
     */
    public static String digestString(String password, String alg) throws NoSuchAlgorithmException {
        String newPass;
        if (alg == null || alg.equals("MD5")) {
            newPass = DigestUtils.md5Hex(password);
        } else if (alg.equals("NONE")) {
            newPass = "password";
        } else if (alg.equals("SHA-256")) {
            newPass = DigestUtils.sha256Hex(password);
        } else if (alg.equals("SHA-512")) {
            newPass = DigestUtils.sha512Hex(password);
        } else {
            newPass = DigestUtils.shaHex(password);
        }
        return newPass;
    }

    /**
     * 加密密碼演算法
     *
     * @param newPass
     *            未加密的密碼
     * @param algorithm
     *            加密演算法
     * @return String 加密後的密碼
     */
    public static String setPassword(String newPass) {
        try {
            if (newPass != null && !"".equals(newPass)) {
                return digestString(newPass, pwdAlgorithm);
            } else{
                return null;
            }
        } catch (NoSuchAlgorithmException nsae) {
            throw new RuntimeException("Security error: " + nsae);
        }
    }

    /**
     * 判斷密碼是不是相等
     *
     * @param beforePwd
     *            要判斷的密碼
     * @param afterPwd
     *            加密後的資料庫密碼
     * @return Boolean true 密碼相等
     */
    public static boolean isPasswordEnable(String beforePwd, String afterPwd) {
        if (beforePwd != null && !"".equals(beforePwd)) {
            String password = setPassword(beforePwd);
            return afterPwd.equals(password);
        } else{
            return false;
        }
    }
}