<html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script> <script> function getAesString(data,key,iv){//加密 var key = CryptoJS.enc.Latin1.parse(key); var iv = CryptoJS.enc.Latin1.parse(iv); var srcs = CryptoJS.enc.Utf8.parse(data); var encrypted = CryptoJS.AES.encrypt(srcs,key, {iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}); return encrypted; } function getDAesString(encrypted,key,iv){//解密 var key = CryptoJS.enc.Latin1.parse(key); var iv = CryptoJS.enc.Latin1.parse(iv); var decrypted = CryptoJS.AES.decrypt(encrypted,key, {iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}); return decrypted.toString(CryptoJS.enc.Utf8); } function getAES(){ //加密 var data = 'abcde';//明文 var key = 'qaz'; //密钥 var iv = '123456'; var encrypted = getAesString(data,key,iv); //密文 // var enstr = CryptoJS.enc.Base64.stringify(encrypted.ciphertext); console.log(encrypted.ciphertext.toString()); console.log("-----------------------"); var back0 = CryptoJS.enc.Hex.parse(encrypted.ciphertext.toString()); console.log(back0); var back1 = CryptoJS.enc.Base64.stringify(back0); var back = getDAesString(back1,key,iv); console.log(back); } getAES(); </script> </head> <body> </body> </html> package com.hmp.common.util; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Hex; public class AesEncryptUtil { //可配置到Constant中,并读取配置文件注入,16位,自己定义 private static final String KEY = "abcdefgabcdefg12"; //参数分别代表 算法名称/加密模式/数据填充方式 private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding"; /** * 加密 * @param content 加密的字符串 * @param encryptKey key值 * @return * @throws Exception */ public static String encrypt(String content, String encryptKey) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.getInstance(ALGORITHMSTR); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES")); byte[] b = cipher.doFinal(content.getBytes("utf-8")); String hexStr = parseByte2HexStr(b); // 采用base64算法进行转码,避免出现中文乱码 return hexStr; } /** * 解密 * @param encryptStr 解密的字符串 * @param decryptKey 解密的key值 * @return * @throws Exception */ public static String decrypt(String encryptStr, String decryptKey) throws Exception { byte[] hexs = Hex.decodeHex(encryptStr); String str = Base64.encodeBase64String(hexs); KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.getInstance(ALGORITHMSTR); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES")); // 采用base64算法进行转码,避免出现中文乱码 byte[] encryptBytes = Base64.decodeBase64(str); byte[] decryptBytes = cipher.doFinal(encryptBytes); return new String(decryptBytes); } public static String encrypt(String content) throws Exception { return encrypt(content, KEY); } public static String decrypt(String encryptStr) throws Exception { return decrypt(encryptStr, KEY); } /**将二进制转换成16进制 * @param buf * @return */ public static String parseByte2HexStr(byte buf[]) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < buf.length; i++) { String hex = Integer.toHexString(buf[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } sb.append(hex); } return sb.toString(); } /**将16进制转换为二进制 * @param hexStr * @return */ public static byte[] parseHexStr2Byte(String hexStr) { if (hexStr.length() < 1) return null; byte[] result = new byte[hexStr.length()/2]; for (int i = 0;i< hexStr.length()/2; i++) { int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16); int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16); result[i] = (byte) (high * 16 + low); } return result; } public static void main(String[] args) throws Exception { String mw = AesEncryptUtil.encrypt("admin"); System.out.println(mw); System.out.println(AesEncryptUtil.decrypt(mw)); } }
AES加密解密
Wesley13
2021-10-11
1755 0 0
点赞
收藏
评论区
加载中...