js java 加密算法_JavaScript与Java前后端AES加解密

1 packagecom.sun.mall.util;2

3 importjava.math.BigInteger;4

5 importjavax.crypto.Cipher;6 importjavax.crypto.KeyGenerator;7 importjavax.crypto.spec.SecretKeySpec;8

9 importorg.apache.commons.codec.binary.Base64;10

11 importcom.sun.mall.constants.IResultCode;12 importcom.xiaoleilu.hutool.util.StrUtil;13

14 importsun.misc.BASE64Decoder;15

16 /**

17 * AES的加密和解密18 * @ClassName: AesUtil19 *@authorsunt20 * @date 2017年11月30日21 *@versionV1.022 */

23 public classAesUtil {24

25 //算法

26 private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding";27

28 /**

29 * aes解密30 *@paramencrypt 内容31 *@return

32 *@throwsException33 */

34 public staticString aesDecrypt(String encrypt) {35 try{36 returnaesDecrypt(encrypt, IResultCode.AES_KEY);37 } catch(Exception e) {38 e.printStackTrace();39 return "";40 }41 }42

43 /**

44 * aes加密45 *@paramcontent46 *@return

47 *@throwsException48 */

49 public staticString aesEncrypt(String content) {50 try{51 returnaesEncrypt(content, IResultCode.AES_KEY);52 } catch(Exception e) {53 e.printStackTrace();54 return "";55 }56 }57

58 /**

59 * 将byte[]转为各种进制的字符串60 *@parambytes byte[]61 *@paramradix 可以转换进制的范围,从Character.MIN_RADIX到Character.MAX_RADIX,超出范围后变为10进制62 *@return转换后的字符串63 */

64 public static String binary(byte[] bytes, intradix){65 return new BigInteger(1, bytes).toString(radix);//这里的1代表正数

66 }67

68 /**

69 * base 64 encode70 *@parambytes 待编码的byte[]71 *@return编码后的base 64 code72 */

73 public static String base64Encode(byte[] bytes){74 returnBase64.encodeBase64String(bytes);75 }76

77 /**

78 * base 64 decode79 *@parambase64Code 待解码的base 64 code80 *@return解码后的byte[]81 *@throwsException82 */

83 public static byte[] base64Decode(String base64Code) throwsException{84 return StrUtil.isEmpty(base64Code) ? null : newBASE64Decoder().decodeBuffer(base64Code);85 }86

87

88 /**

89 * AES加密90 *@paramcontent 待加密的内容91 *@paramencryptKey 加密密钥92 *@return加密后的byte[]93 *@throwsException94 */

95 public static byte[] aesEncryptToBytes(String content, String encryptKey) throwsException {96 KeyGenerator kgen = KeyGenerator.getInstance("AES");97 kgen.init(128);98 Cipher cipher =Cipher.getInstance(ALGORITHMSTR);99 cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES"));100

101 return cipher.doFinal(content.getBytes("utf-8"));102 }103

104

105 /**

106 * AES加密为base 64 code107 *@paramcontent 待加密的内容108 *@paramencryptKey 加密密钥109 *@return加密后的base 64 code110 *@throwsException111 */

112 public static String aesEncrypt(String content, String encryptKey) throwsException {113 returnbase64Encode(aesEncryptToBytes(content, encryptKey));114 }115

116 /**

117 * AES解密118 *@paramencryptBytes 待解密的byte[]119 *@paramdecryptKey 解密密钥120 *@return解密后的String121 *@throwsException122 */

123 public static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throwsException {124 KeyGenerator kgen = KeyGenerator.getInstance("AES");125 kgen.init(128);126

127 Cipher cipher =Cipher.getInstance(ALGORITHMSTR);128 cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES"));129 byte[] decryptBytes =cipher.doFinal(encryptBytes);130 return newString(decryptBytes);131 }132

133

134 /**

135 * 将base 64 code AES解密136 *@paramencryptStr 待解密的base 64 code137 *@paramdecryptKey 解密密钥138 *@return解密后的string139 *@throwsException140 */

141 public static String aesDecrypt(String encryptStr, String decryptKey) throwsException {142 return StrUtil.isEmpty(encryptStr) ? null: aesDecryptByBytes(base64Decode(encryptStr), decryptKey);143 }144

145 /**

146 * 测试147 * 前端js将参数加密提交到后台如何解密148 * 首先获取服务端的私钥:将客户端的公钥加密后获得的结果149 * 通过服务端的私钥和客户端传递的加密字符串即可实现解密150 */

151 public static void main(String[] args) throwsException {152 String content = "456";153 System.out.println("加密前:" +content);154 System.out.println("加密密钥和解密密钥:" +IResultCode.AES_KEY);155 String encrypt =aesEncrypt(content, IResultCode.AES_KEY);156 System.out.println("加密后:" +encrypt);157 String decrypt =aesDecrypt(encrypt, IResultCode.AES_KEY);158 System.out.println("解密后:" +decrypt);159 //js加密后的字符串: lkqsgKHH7OkhIa0tISMtuQ==

160 String jsData = aesDecrypt("lkqsgKHH7OkhIa0tISMtuQ==", IResultCode.AES_KEY);161 System.out.println("前端数据解密后的值:" +jsData);162

163 }164 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值