JAVA账户密码加密及密码校验

2020-04-21  本文已影响0人  蓝胖子的白日梦丶
package com.framework.core.lang;
 
import java.security.MessageDigest;
 
import org.apache.commons.codec.binary.Base64;
 
 
/**
 * 加密、密码判断
 * @date   2017年11月28日
 */
public class EncryptUtil {
    
    private static final int PASSWORDKEYLENGTH = 8;
    
    /**
     * 加密
     * @param password
     * @return
     * @throws Exception
     */
    public static String encrypt(String password) {
        String sSafeCode = getRandomString(PASSWORDKEYLENGTH);// 产生一段随机字符串,作为安全域。
        return sSafeCode + encryptWithSafeCode(password, sSafeCode);
    }
 
    /**
     * 密码校验<br/>
     * password-明文<br/>
     * safePassword-密文<br/>
     * @param password-明文
     * @param safePassword-密文
     * @return
     * @throws Exception
     */
    public static boolean checkedPassword(String password,String safePassword){
        if(encryptWithSafeCode(password,safePassword.trim().substring(0, PASSWORDKEYLENGTH)).equals(safePassword.trim().substring(PASSWORDKEYLENGTH, safePassword.length()))){
            return true;
        }
        return false;
    }
    
    private static String encryptWithSafeCode(String password, String safeCode){
        try {
            byte[] abyteSafeCode = Base64.decodeBase64(safeCode);
            MessageDigest messagedigest = MessageDigest.getInstance("MD5");
            //messagedigest.update(abyteSafeCode); 此句在最后加密中没有实际意义
            messagedigest.update(password.getBytes("UTF8"));
            return Base64.encodeBase64String(messagedigest.digest());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
 
    public static java.util.Random random = new java.util.Random();
 
    private static String getRandomString(int length) {
        char[] ach = new char[length];
        for (int i = 0; i < ach.length; i++) {
            ach[i] = getRandomChar();
        }
 
        return new String(ach);
    }
 
    private static char getRandomChar() {
        char ch;
 
        int iRandomInt = random.nextInt(52);
 
        if (iRandomInt < 10) {
            // 数字,0的ASCII码是48。
            ch = (char) (iRandomInt + 48);
        } else if (iRandomInt < 36) {
            // 大写字母,A的ASCII码是65。
            // ch = (char)(iRandomInt - 10 + 66);
            ch = (char) (iRandomInt + 56);
        } else {
            // 小写字母,a的ASCII码是97。
            // ch = (char)(iRandomInt - 36 + 97);
            ch = (char) (iRandomInt + 61);
        }
 
        return ch;
    }
}
上一篇下一篇

猜你喜欢

热点阅读