java实现mysql HEX(AES_ENCRYPT(val,‘salt‘))加密,AES_DECRYPT(UNHEX(val),‘salt‘) 解密操作

/**
	 * 
	 * <p>Title: encrypt</p>  
	 * <p>Description:DES加密操作 </p>  
	 * @param source 要加密的源
	 * @param key 约定的密钥
	 * @return  
	 * @author MJF
	 */
    public static String encrypt(String source, String key) {
    	try {
		    SecretKey strKey = generateMySQLAESKey(key,"ASCII");
		    Cipher cipher = Cipher.getInstance("AES");
		    cipher.init(Cipher.ENCRYPT_MODE, strKey);
		    byte[] cleartext = source.getBytes("UTF-8");
		    byte[] ciphertextBytes = cipher.doFinal(cleartext);
		    return new String(Hex.encodeHex(ciphertextBytes));
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    	return null;
    }



/**
     * <p>Title: decrypt</p>  
     * <p>Description:解密 </p>  
     * @param source 密文
     * @param key 约定的密钥
     * @return
     * @author MJF
     */
    public static String decrypt(String source, String key) {
    	try {
    		SecretKey AESkey = generateMySQLAESKey(key,"ASCII");
    		Cipher cipher = Cipher.getInstance("AES");
    		cipher.init(Cipher.DECRYPT_MODE, AESkey);
    		byte[] cleartext = Hex.decodeHex(source.toCharArray());
    		byte[] ciphertextBytes = cipher.doFinal(cleartext);
    		return new String(ciphertextBytes, "UTF-8");
    	} catch (Exception e) {
    		e.printStackTrace();
    	} 
    	return null;
    }
    
    public static SecretKeySpec generateMySQLAESKey(final String key, final String encoding) {
    	  try {
	    	   final byte[] finalKey = new byte[16];
	    	   int i = 0;
	    	   for(byte b : key.getBytes(encoding))
	    	    finalKey[i++%16] ^= b;   
	    	   return new SecretKeySpec(finalKey, "AES");
    	  } catch(Exception e) {
    		  throw new RuntimeException(e);
    	  }
    }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值