如何使用CryptoJS配合Java进行AES加密和解密
2017-10-20 09:41
966 查看
注意
1.
2. 加密时使用的key和iv要转换成base64格式
一、前端
1.函数
2. 示例
二、后端
1.函数
2.示例
1.
PKCS5Padding和
PKCS7Padding是一样的
2. 加密时使用的key和iv要转换成base64格式
一、前端
1.函数
function encrypt (msg, key, iv) { return CryptoJS.AES.encrypt(msg, key, { iv: iv, padding: CryptoJS.pad.Pkcs7, mode: CryptoJS.mode.CBC }); } function decrypt (cipherText, key, iv) { return CryptoJS.AES.decrypt({ ciphertext: cipherText }, key, { iv: iv, padding: CryptoJS.pad.Pkcs7, mode: CryptoJS.mode.CBC }); }
2. 示例
var key = CryptoJS.enc.Base64.parse('ZGIyMTM5NTYxYzlmZTA2OA=='); var iv = CryptoJS.enc.Base64.parse('ZGIyMTM5NTYxYzlmZTA2OA=='); var encrypted = encrypt('Hello World', key, iv); var cipherText = encrypted.ciphertext.toString(); //java 使用 34439a96e68b129093105b67de81c0fc console.log(cipherText); // 拿到字符串类型的密文需要先将其用Hex方法parse一下 var cipherTextHexStr = CryptoJS.enc.Hex.parse(cipherText); // 将密文转为Base64的字符串 // 只有Base64类型的字符串密文才能对其进行解密 var cipherTextBase64Str = CryptoJS.enc.Base64.stringify(cipherTextHexStr); //下面三种解密都可以 var decrypted = CryptoJS.AES.decrypt(cipherTextBase64Str, key, { iv: iv, padding: CryptoJS.pad.Pkcs7, mode: CryptoJS.mode.CBC }); decrypted = decrypt(CryptoJS.enc.Base64.parse(cipherTextBase64Str), key, iv); decrypted = decrypt(cipherTextHexStr, key, iv); console.log(decrypted.toString(CryptoJS.enc.Utf8));
二、后端
1.函数
public static byte[] AES_CBC_Decrypt(byte[] data, byte[] key, byte[] iv) throws Exception{ Cipher cipher = getCipher(Cipher.DECRYPT_MODE, key, iv); return cipher.doFinal(data); } private static Cipher getCipher(int mode, byte[] key, byte[] iv) throws Exception{ Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); //因为AES的加密块大小是128bit(16byte), 所以key是128、192、256bit无关 //System.out.println("cipher.getBlockSize(): " + cipher.getBlockSize()); SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES"); cipher.init(mode, secretKeySpec, new IvParameterSpec(iv)); return cipher; }
2.示例
//传给crypto的key、iv要使用base64格式 //ZGIyMTM5NTYxYzlmZTA2OA== byte[] bytes = "db2139561c9fe068".getBytes(); String base64Str = Base64.encodeBase64String(bytes); System.out.println(base64Str); String crypto = "34439a96e68b129093105b67de81c0fc"; data = Hex.decodeHex(crypto.toCharArray()); s = AES_CBC_Decrypt(data, bytes, bytes); System.out.println(new String(s));
相关文章推荐
- Java:如何使用Cipher类对字符串进行加密解密
- 使用java进行 AES 加密 解密
- 对称加密算法AES------使用AES算法对文件进行加密/解密的操作(JAVA)
- JavaScript的CryptoJS AES/ECB/NoPadding加密,可与JAVA objective-c 进行同步加解密
- java 使用RSA算法进行加密和解密
- 【java】AES加密解密|及Base64的使用
- 【java】AES加密解密|及Base64的使用
- 如何使用Base64进行加密和解密(续)
- 使用Python进行AES加密和解密的示例代码
- 【java】AES加密解密|及Base64的使用
- java中的使用RSA算法进行公钥加密私钥解密
- Linux如何使用GPG(GNU Privacy Guard)对信息/文件进行加密和解密
- 【java】AES加密解密|及Base64的使用
- ios下使用RSA算法加密与java后台解密配合demo
- 使用Java Base64解密算对openssl的base64加密字符串进行解密
- 【java】AES加密解密|及Base64的使用
- 如何使用Base64进行加密和解密
- 如何用Java进行3DES加密解密
- Java中使用DES进行加密解密
- java中的使用RSA算法进行公钥加密私钥解密 .