美文网首页
JAVA账户密码加密及密码校验

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

作者: 蓝胖子的白日梦丶 | 来源:发表于2020-04-21 16:27 被阅读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;
        }
    }
    

    相关文章

      网友评论

          本文标题:JAVA账户密码加密及密码校验

          本文链接:https://www.haomeiwen.com/subject/njqpihtx.html