这几天公司给了一个项目,说为了用户安全性,需要加密,我在网上找了一些加密,发现Crypto-JS 挺好的用的 我就用了Crypto-JS DES加密,期间出现一些错误,发现这些错误都在我引入的Crypto-JS文件里面,刚开始以为文件引入错误,重新引入了几遍还是不行,都会出现错。
不说了上代码,代码我也是借鉴的网上的,大部分都相同。
需要Crypto-JS引入文件的网上也有很多,可以去找一下。
<body>
<div>
加密前:<textarea id="source" value="" style="width:500px;height:90px;" /></textarea>
<hr>
加密后:<textarea id="target" value="" style="width:500px;height:90px;" ></textarea>
<hr>
<input type="button" onclick="test();" name="" value="加密" />
<hr>
密文:<textarea id="sourceS" value="" width="400px" style="width:500px;height:90px;" ></textarea>
<hr>
解密后:<textarea id="jiemi" value="" style="width:500px;height:90px;" ></textarea>
<hr>
<input type="button" onclick="test1();" onclick="text2()" name="" value="解密"/>
</div>
</body>
<script type="text/javascript">
var key = 'BOTWAVEE';
//CBC模式加密
function encryptByDESModeCBC(message) {
var keyHex = CryptoJS.enc.Utf8.parse(key);
var ivHex = CryptoJS.enc.Utf8.parse(key);
encrypted = CryptoJS.DES.encrypt(message, keyHex, {
iv:ivHex,
mode: CryptoJS.mode.CBC,
padding:CryptoJS.pad.Pkcs7
}
);
return encrypted.ciphertext.toString();
}
//CBC模式解密
function decryptByDESModeCBC(ciphertext2) {
var keyHex = CryptoJS.enc.Utf8.parse(key);
var ivHex = CryptoJS.enc.Utf8.parse(key);
// direct decrypt ciphertext
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Hex.parse(ciphertext2)
}, keyHex, {
iv:ivHex,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
//DES ECB模式加密
function encryptByDESModeEBC(message){
var keyHex = CryptoJS.enc.Utf8.parse(key);
var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.ciphertext.toString();
}
//DES ECB模式解密
function decryptByDESModeEBC(ciphertext){
var keyHex = CryptoJS.enc.Utf8.parse(key);
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Hex.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var result_value = decrypted.toString(CryptoJS.enc.Utf8);
return result_value;
}
function test(){
var source = $("#source").val();
var cc = encryptByDESModeEBC(CryptoJS.enc.Utf8.parse(source));
$("#target").val(cc);
}
function test1(){
var source = $("#sourceS").val();
var dd = decryptByDESModeEBC(source);
$("#jiemi").val(dd);
}
</script>
接下来要引入DES的文件,
<script type="text/javascript" src="js/tripledes.js" ></script>
<script type="text/javascript" src="js/mode-ecb.js" ></script>
除了要引入这俩个文件外,还要引入jq文件,当然,如果你文的其他代码实现加密,里面没有用到jq就不用引起jq文件了。
然后你运行会这个错误
没有引入Crypto-JS文件,明明已经引入了,网上找了一些,发现还要引入一个总体的文件,就是这个
<script type="text/javascript" src="js/core.js" ></script>
这个总可以吧,结果发现还有错误,
未定义为 ‘extend’ 可是代码里面也没有这个,最后发现还少一个引入文件
<script type="text/javascript" src="js/cipher-core.js" ></script>
把这个引入就可以了,
还有一个值的注意,引入文件时,这个文件一定要放在最上面,不然还会报错
<script type="text/javascript" src="js/core.js" ></script>
好了,大致也就这样,希望对大家有帮助,最后代码结果