简单加密技术及mysql数据库自带函数加解密

Java代码实现简单可逆加解密

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class SecureStorageTool {
	 private static final String AES="AES";
	    private static final String CHAR_SET_NAME1="UTF-8";
	    private static final String CHAR_SET_NAME2="ASCII";
	    private static final String CIPHER_KEY="AES/CBC/PKCS5Padding";

	    /**
	     * 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。
	     */
	    private static final String IV_PARAMETER="kuc#fcp84d2x.pr8";
	    /**
	     * 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,需要为16位。
	     */
	    private static final String S_KEY="idpj587l0#4@7oj7";


	    /**
	     * 加密
	     * @param param
	     * @return
	     * @throws Exception
	     */
	    public static String encryption(String param) {
	    	 if(param==null) {
	    		 return null;
	    	 }
	    	 if(param.isEmpty()) {
	    		 return "";
	    	 }
	    	 String encode = "";
	    	try {
	    		 Cipher cipher= Cipher.getInstance(CIPHER_KEY);
	 	        SecretKeySpec skeySpec = new SecretKeySpec(S_KEY.getBytes(), AES);
	 	        // 使用CBC模式,需要一个向量iv,可增加加密算法的强度
	 	        IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes());
	 	        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
	 	        // 此处使用BASE64做转码。
	 	        encode = new BASE64Encoder().encode(cipher.doFinal(param.getBytes(CHAR_SET_NAME1)));
				
			} catch (Exception e) {
				encode = null;
			}
	       
	        return encode;

	    }

	    /**
	     *  解密
	     * @param value
	     * @return
	     * @throws Exception
	     */
	    public static String decrypt(String value) {	    	 
	    	 if(value==null) {
	    		 return null;
	    	 }
	    	 if(value.isEmpty()) {
	    		 return "";
	    	 }
	    	 String decode = "";
	    	try {
	    	    SecretKeySpec skeySpec = new SecretKeySpec(S_KEY.getBytes(CHAR_SET_NAME2), AES);
	  	        Cipher cipher = Cipher.getInstance(CIPHER_KEY);
	  	        IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes());
	  	        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
	  	        // 先用base64解密
	  	        decode = new String(cipher.doFinal(new BASE64Decoder().decodeBuffer(value)), CHAR_SET_NAME1);
			} catch (Exception e) {
				decode = null;
			}
	  
	        return decode;
	    }


	    /**
	     测试
	     * @throws Exception 
	     */
	   
	    public static void main(String[] args) throws Exception {
	    	  String key="usemeiguogou";
		        System.out.println("key="+key);
		        //输出 key=123
		        String value=encryption(key);
		        System.out.println("encryption value="+value);
		        //输出 encryption value=OTslJ40Fa9a7ImOmCbmLPw==
		        System.out.println("decrypt:"+decrypt("  "));
		        //输出 decrypt key=123
		}

}

mysql数据库自带函数加解密

		加密
		HEX(AES_ENCRYPT(#{},<include refid="key" />))
		
		解密
		AES_DECRYPT(UNHEX(),<include refid="key" />)
posted @ 2020-10-27 17:50  小小白兔兔  阅读(288)  评论(0编辑  收藏  举报