hive 之加密自定義函數


1.Base64 <可逆不安全!>

/**
* Base64不是安全領域下的加解密算法,只是一個編碼算法,
* 通常用於把二進制數據編碼為可寫的字符形式的數據,
* 特別適合在http,mime協議下的網絡快速傳輸數據。
* UTF-8和GBK中文的Base64編碼結果是不同的。
* 采用Base64編碼不僅比較簡短,同時也具有不可讀性,
* 即所編碼的數據不會被人用肉眼所直接看到,但這種方式很初級,
* 很簡單。Base64可以對圖片文件進行編碼傳輸。
*/

2.MD5 <不可逆!>

/**
* 散列算法(簽名算法)有:MD5、SHA1、HMAC
* 用途:主要用於驗證,防止信息被修。具體用途如:文件校驗、數字簽名、鑒權協議
*/

3.AES <可逆!>

/**
* 對稱性加密算法有:AES、DES、3DES
* 用途:對稱加密算法用來對敏感數據等信息進行加密
*
* AES 是一種可逆加密算法,對用戶的敏感信息加密處理 \
* 對原始數據進行AES加密后,再進行Base64編碼轉化;
*/

一、MD5
public class MD5Enscript extends UDF {

    //md5+鹽(salt)非對稱加密
    private static final String SALT = "KGC#kb08@20200511@xxq@chy#=";

    public String evaluate(String pwd) throws IOException {
        return DigestUtils.md5Hex(SALT+pwd+SALT);
    }

}

二、Base64Encrypt
public class Base64Encrypt extends UDF {

    public String evaluate(String str) throws UnsupportedEncodingException {
        return Base64.encodeBase64String(str.getBytes("UTF-8"));
    }

}
public class Base64Decrypt extends UDF {

    public String evaluate(String str) throws UnsupportedEncodingException {
        return new String(Base64.decodeBase64(str));
    }
}
三、AESSuper
public class AESSuper {

    private static final String SALT = "#./*KGC#kb08\\u1009889";
    private static final String ALGORITHM = "AES";
    private static final String CHAR_SET = "UTF-8";
    private static SecretKeySpec sks;
    private static Cipher cipher;

    static {
        try {
            KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM);
            generator.init(128,new SecureRandom(SALT.getBytes()));
            SecretKey secretKey = generator.generateKey();
            byte[] encoded = secretKey.getEncoded();
            sks = new SecretKeySpec(encoded,ALGORITHM);
            cipher = Cipher.getInstance(ALGORITHM);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static byte[] encrypt(String src) throws Exception{

        cipher.init(Cipher.ENCRYPT_MODE,sks);
        return cipher.doFinal(src.getBytes(CHAR_SET));
    }

    public static byte[] decrypt(byte[] src) throws Exception{
        cipher.init(Cipher.DECRYPT_MODE,sks);
        return cipher.doFinal(src);
    }

}
public class AESEncrypt extends UDF {

    public String evaluate(String src) throws Exception {

        return Base64.encodeBase64String(AESSuper.encrypt(src));
    }

}
public class AESDecrypt extends UDF {

    public String evaluate(String src) throws Exception {
        return new String(AESSuper.decrypt(Base64.decodeBase64(src.getBytes())));
    }

}

 








免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM