体验更优排版请移步原文:http://blog.kwin.wang/programming/symmetric-encryption-des-js-java.html
对称加密是最快速、最简单的一种加密方式,加密和解密共用一个对称秘钥,因其高效性,被广泛应用在加密协议中。今天恰巧用到,在此总结一下。
我们项目中需要在前端js
里对入参进行DES加密传入后台,后台java
再进行解密,网上找了一个谷歌的DES加密js包crypto-js
,点此下载
下载完成之后找到两个js文件引入项目工程中,
1
2
|
<script type="text/javascript" src="libs/crypto/tripledes.js" ></script>
<script type="text/javascript" src="libs/crypto/mode-ecb.js" ></script>
|
js中对params
(json对象)加密:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
function encryptParamsByDES(params, key) {
var keyHex = CryptoJS.enc.Utf8.parse(key),
desParams = {};
if(!params || JSON.stringify(params) == '{}'){
return {};
}else{
$.each(params, function(i, val) {
var desVal = CryptoJS.DES.encrypt(val, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
desParams[i] = desVal.toString();
});
return desParams;
}
}
console.log(encryptParamsByDES({name: 'test', password: '123456'}, 'kwinwang'));
|
将对称秘钥设置为kwinwang,测试加密输出:
Object {name: “r5vQ2jNkBsc=”, password: “nqp+WDNwUFw=”}
前端加密就完成了,我们再用java尝试解密,
1
2
3
4
5
6
|
public static void main(String[] args) throws Exception {
String decName = DESUtil.decryption("r5vQ2jNkBsc=", "kwinwang");//解密name
String decPassword = DESUtil.decryption("nqp+WDNwUFw=", "kwinwang");//解密password
System.out.println("明文name:" + decName);
System.out.println("明文password:" + decPassword);
}
|
执行main方法,控制台输出:
后台解密成功!简直不敢相信,但就是这么简单。
附件下载:DESUtil工具类(Java)