参考
Aes 加密和解密 Cryptojs 和 java
CryptoJS:https://github.com/brix/crypto-js
说明
AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,加密和解密使用相同的密钥
前端加密,后端解密
前端加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>AES TEST</title> </head> <body> <p>go</p> <script src="core.js"></script> <script src="cipher-core.js"></script> <script src="mode-ecb.js"></script> <script src="aes.js"></script> <script> var key = CryptoJS.enc.Utf8.parse("1538663015386630"); var plaintText = 'wsk-test'; var encryptedData = CryptoJS.AES.encrypt(plaintText, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
var a = plaintText + ''; var b = encryptedData + ''; console.log("加密前:"+plaintText + ''); console.log("加密后:"+encryptedData + ''); alert("加密前:"+a); alert("加密后:"+b); </script> </body> </html>
|
后端解密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
public static String decryptAES(String content, String key) { try { SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, skeySpec); return new String(cipher.doFinal(parseHexStr2Byte(content))); } catch (Exception e) { log.error(String.format("解密失败:,content:%s, key: %s", content, key)); } return content; }
private 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; }
|
后端加密「16进制」,前端解密
后端加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
public static String encryptAES(String content, String key) { try { SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] result = cipher.doFinal(content.getBytes(StandardCharsets.UTF_8)); return parseByte2HexStr(result); } catch (Exception e) { log.error(String.format("加密失败:,content:%s, key: %s", content, key)); } return content; }
public static String parseByte2HexStr(byte[] buf) { StringBuilder sb = new StringBuilder(); for (byte b : buf) { String hex = Integer.toHexString(b & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } sb.append(hex.toUpperCase()); } return sb.toString(); }
|
前端解密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <script src="core.js"></script> <script src="enc-base64.js"></script> <script src="cipher-core.js"></script> <script src="mode-ecb.js"></script> <script src="aes.js"></script> <body> <script> var key = CryptoJS.enc.Utf8.parse("1538663015386630"); var wsk = "a551e4d54cfc396cc93c89dd55f6587c"; var encryptedHexStr = CryptoJS.enc.Hex.parse(wsk); var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8); console.log("解密后:"+decryptedStr); </script> </body> </html>
|
后端加密「base64」,前端解密
后端加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public static String encryptAESWithBase64(String content, String key) { try { SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] result = cipher.doFinal(content.getBytes(StandardCharsets.UTF_8)); return Base64.encodeBase64String(result); } catch (Exception e) { log.error(String.format("加密失败:,content:%s, key: %s", content, key)); } return content; }
|
前端解密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <script src="http://raw.githack.com/brix/crypto-js/develop/src/core.js"></script> <script src="http://raw.githack.com/brix/crypto-js/develop/src/enc-base64.js"></script> <script src="http://raw.githack.com/brix/crypto-js/develop/src/cipher-core.js"></script> <script src="http://raw.githack.com/brix/crypto-js/develop/src/mode-ecb.js"></script> <script src="http://raw.githack.com/brix/crypto-js/develop/src/aes.js"></script> <script src="http://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script> <body> 解密前:<div id="one"></div> <br/>
秘钥:<div id="two"></div> <br/> 解密后:<div id="three"></div> <script> var tt = "1538663015386630"; var key = CryptoJS.enc.Utf8.parse(tt); var wsk = "a551e4d54cfc396cc93c89dd55f6587c"; var encryptedHexStr = CryptoJS.enc.Hex.parse(wsk);
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8); console.log("解密后:"+decryptedStr); $(document).ready(function(){ $("#one").text(wsk); }); $(document).ready(function(){ $("#two").text(tt); }); $(document).ready(function(){ $("#three").text(decryptedStr); }); </script> </body> </html>
|