JavaScript与Java之间AES加密解密
来源:互联网 发布:淘宝店铺搜索排名 编辑:程序博客网 时间:2024/06/10 20:55
采用CBC模式
JavaScript代码:
$(document).ready(function (){var str = "你好";var e = AESUtils.encrypt(str);var d = AESUtils.decrypt(e);console.log("明文:"+str);console.log("加密:"+e);console.log("解密:"+d);});var AESUtils = {key:CryptoJS.enc.Utf8.parse("1234567891234567"),iv:CryptoJS.enc.Utf8.parse("1234567981234657"),/** * 加密 * 返回密文(base64)的16进制大写字符串 * @param {Object} data */encrypt:function(data){var srcs = CryptoJS.enc.Utf8.parse(data);var encrypted = CryptoJS.AES.encrypt(srcs, this.key, {iv:this.iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});return encrypted.ciphertext.toString().toUpperCase();},/** * 解密 * @param {Object} data */decrypt:function(data){var encryptedHexStr = CryptoJS.enc.Hex.parse(data); var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); var decrypted = CryptoJS.AES.decrypt(encryptedBase64Str, this.key, {iv:this.iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});return decrypted.toString(CryptoJS.enc.Utf8);}}
Java代码:
AESTest.java
package com.communityonline.test;import java.io.UnsupportedEncodingException;import java.security.InvalidAlgorithmParameterException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import com.communityonline.util.ParseSystemUtil;public class AESTest {private static String keyStr = "1234567891234567";public static final String VIPARA = "1234567891234567";public static void main(String[] args) {String str = "你好";byte[] encrypted = encrypt(str);byte[] decrypted = decrypt(encrypted);System.out.println("原文:"+str);System.out.println("密文:"+ParseSystemUtil.parseByte2HexStr(encrypted));System.out.println("解密:"+new String(decrypted));}public static byte[] encrypt(String content){try {IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes());SecretKeySpec key = new SecretKeySpec(keyStr.getBytes(), "AES");// 转换为AES专用密钥Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// 创建密码器byte[] byteContent = content.getBytes("utf-8");cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);// 初始化为加密模式的密码器byte[] result = cipher.doFinal(byteContent);// 加密return result;} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} catch (InvalidAlgorithmParameterException e) {e.printStackTrace();}return null;}public static byte[] decrypt(byte[] content) {try {IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes());SecretKeySpec key = new SecretKeySpec(keyStr.getBytes(), "AES");// 转换为AES专用密钥Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// 创建密码器cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);// 初始化为解密模式的密码器byte[] result = cipher.doFinal(content);return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} catch (InvalidAlgorithmParameterException e) {e.printStackTrace();}return null;}}
ParseSystemUtil.java
package com.communityonline.util;public class ParseSystemUtil {/**将二进制转换成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.toUpperCase()); } 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; }}
阅读全文
0 0
- JavaScript与Java之间AES加密解密
- JAVA与PHP之间进行aes加密解密
- java AES 加密与解密
- JAVA AES加密与解密
- javascript 实现 aes加密解密(可与Java互解)
- AES加密解密,Winphone8与Java互通
- js与java相互aes加密解密
- Java基于AES的加密与解密
- js与java相互aes加密解密
- 使用AES,java加密与js解密
- AES加密与解密
- AES加密与解密
- AES 加密与解密
- JavaScript和Go之间的AES加密解密
- 加密解密。(aes, java)
- java,AES加密,解密
- java AES加密解密
- java AES加密解密
- js 延时执行某函数
- Android与HTML5交互模版
- VS DLL修改lib生成路径
- linux 下命令模式weblogic、domain从jar开始安装
- 关于日本车使用泡沫的思考?
- JavaScript与Java之间AES加密解密
- Sublime 下配置Python程序交互式运行和单步调试
- URLClassLoader加载类的路径
- Centos7安装python3与python2并存
- unity官方内置网络unet的实例教程(八)
- C++输入、输出优化模板整理
- Linux中atme,ctime,mtime的区别
- 思路变换
- freemarker语法