版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wu_Dream/article/details/84572270
一、JS中加密(解密)数据,采用的是谷歌的CryptoJS静态件
(https://pan.baidu.com/s/1XRggARIydbwlM4YWknMXQA 提取码:9lus)
- jsp页面需要引入两个js,一个是加密的规则,另一个是加密的算法。(注意引入的顺序)
<script type="text/javascript" src="ace.js"></script> <script type="text/javascript" src="mode-ecb.js"></script>
-
js加密实现
//word为需要加密的String字符 function encrypt(word){ //密钥--应和后台java解密或是前台js解密的密钥保持一致(16进制) var key = CryptoJS.enc.Utf8.parse("1111wwww2222uuuu"); //偏移量 var srcs = CryptoJS.enc.Utf8.parse(word); //算法 var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); //替换--防止值为“1”的情况 var reg = new RegExp('/',"g"); return encrypted.toString().replace(reg,"#"); }
- js解密实现
function decrypt(word){
var key = CryptoJS.enc.Utf8.parse("1111wwww2222uuuu");
var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
二、java中解密(加密)数据实现
- 创建加密工具类
package com.sinosoft.utility; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; import sun.misc.BASE64Decoder; /** * 加密工具类 实现aes加密、解密 */ @SuppressWarnings("restriction") public class AesUtil { //密钥(16进制,和前台保持一致,或者是作为参数直接传过来也可以) private static final String defaultKey = "1111wwww2222uuuu"; //算法PKCS5Padding private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding"; //测试数据 private static final String testContent = "1"; //自测 public static void main(String[] args) throws Exception { System.out.println("加密前:" + testContent); String encrypt = encrypt(testContent); System.out.println("加密后:" + encrypt); String decrypt = decrypt(encrypt); System.out.println("解密后:" + decrypt); } //AES加密--为base 64 code public static String encrypt(String content) throws Exception { return base64Encode(aesEncryptToBytes(content)); } //AES解密--并解密base 64 code public static String decrypt(String encryptStr) throws Exception { encryptStr.replaceAll("#","/"); return StringUtils.isEmpty(encryptStr) ? null : aesDecryptByBytes(base64Decode(encryptStr)); } //base 64 encode编码 private static String base64Encode(byte[] bytes) { return Base64.encodeBase64String(bytes); } //base 64 decode解码---》因为传过来的值是通过base64编码而后再进行aes加密出来的,所以解密之前先进行base64解码 private static byte[] base64Decode(String base64Code) throws Exception { return StringUtils.isEmpty(base64Code) ? null : new BASE64Decoder().decodeBuffer(base64Code); } //AES加密 private static byte[] aesEncryptToBytes(String content) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.getInstance(ALGORITHMSTR); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(defaultKey.getBytes(), "AES")); return cipher.doFinal(content.getBytes("utf-8")); } //AES解密 private static String aesDecryptByBytes(byte[] encryptBytes) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.getInstance(ALGORITHMSTR); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES")); byte[] decryptBytes = cipher.doFinal(encryptBytes); return new String(decryptBytes,"utf-8"); } }
-
java类中具体调用实现。
//提供调用的方法 public static String getAes(String data){ if(data != null && !data.equals("")){ String str = AesUtil.decrypt(data); return str; } return data; }
三、以上js加密解密,和java加密解密,皆可通用,组合。
四、本文经由思考并解决部分问题而整理出来,参考博客 http://blog.csdn.net/z83986976/article/details/51027150;https://blog.csdn.net/u010648555/article/details/68066629