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;    }}






原创粉丝点击