3DES的加密与解密
Base64与Hex
Base64与Hex都属于编码形式,Hex又称Base16。在3DES的加密与解密过程中,需要进行两种编码形式的转换。
3DES的加密
首先first.html代码为
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>3DES加密</title>
</head>
<body>
<div>
<input id="word1" />
</div>
<div>
<button id="encrypt">加密</button>
</div>
<div id="result1"></div>
<div>
<button id="decrypt">解密</button>
</div>
<div id="result2"></div>
</body>
<script src="js/jquery-3.4.1.min.js"></script>
<script src="js/core.js"></script>
<script src="js/cipher-core.js"></script>
<script src="js/format-hex.js"></script>
<script src="js/tripledes.js"></script>
<script src="js/ecb.js"></script>
<script src="js/md5.js"></script>
<script src="js/first.js"></script>
</html>
引用的js文件文结尾会给。
相应的first.js文件为
var key = "b2Z14a21dfPrWX12q186wsy5";
function md5Hex(data) {
return CryptoJS.MD5(data).toString();
}
$(function () {
$("#encrypt").click(function () {
var word1 = $("#word1").val();
var ciphertext = md5Hex(word1);//MD5加密密文
console.log(ciphertext);
var meg = encryptByDES(ciphertext);
$("#result1").text(meg);
});
$("#decrypt").click(function () {
var word1 = $("#word1").val();
var ciphertext = md5Hex(word1);//MD5加密密文
var text = encryptByDES(ciphertext);
//console.log(text);
var md=decryptByDES(text);
$("#result2").text(md);
});
})
function encryptByDES(message) {
var keyHex = CryptoJS.enc.Utf8.parse(key);
var encrypted = CryptoJS.TripleDES.encrypt(message, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
function decryptByDES(ciphertext) {
var keyHex = CryptoJS.enc.Utf8.parse(key);
var decrypted = CryptoJS.TripleDES.decrypt(ciphertext, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
需要注意的是,我使用的是输出内容的编码方式为Hex,3DES-ECB的模式。
遇到的问题
我在网上找到的cipher-core.js文件都是Base64的输出格式,Hex输出格式下加密正确,解密为空,找了好久才发现是js文件的问题,将cipher-core.js文件中的Base64定义的改成了Hex定义,这样解密结果正确,结果为原文MD5加密之后的。
cipher-core.js文件
/**
* Cipher core components.
*/
CryptoJS.lib.Cipher || (function (undefined) {
// Shortcuts
var C = CryptoJS;
var C_lib = C