加密在我们前端的开发中也是经常遇见的。本文只把我们常用的加密方法进行总结。不去纠结加密的具体实现方式(密码学,太庞大了)。
常见的加密算法基本分为这几类,
RSA加密:RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。(这才是正经的加密算法)
非对称加密算法:非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法
DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
AES这个标准用来替代原先的DES
DES/AES我们合并在一起介绍其用法和特点
Base64是一种用64个字符来表示任意二进制数据的方法。base64是一种编码方式而不是加密算法。只是看上去像是加密而已(吓唬人)。
像这样的混淆代码, 最终都会调用eval来运行加密的代码
观察你给的这一段, 发现\u0065\u0076\u0061\u006c, 刚好就代表了eval函数
把它删去再运行这一段得到
var _token = "jmm8qvq";
後面还有一段很长的, 同理删去eval函数就能得到原始代码
是用javascript加密的,用下面这段代码可以解密:
把下面的代码存成html 然后打开
html
head
titletransform between native and ascii/title
/head
script type="text/javascript"!--
var keyStr = "ABCDEFGHIJKLMNOP" +
"QRSTUVWXYZabcdef" +
"ghijklmnopqrstuv" +
"wxyz0123456789+/" +
"=";
function native2ascii(strNative) {
var output = "";
for (var i=0; istrNative.length; i++) {
var c = strNative.charAt(i);
var cc = strNative.charCodeAt(i);
if (cc 0xff)
output += "\\u" + toHex(cc 8) + toHex(cc 0xff);
else
output += c;
}
return output;
}
var hexChars = "0123456789ABCDEF";
function toHex(n) {
var nH = (n 4) 0x0f;
var nL = n 0x0f;
return hexChars.charAt(nH) + hexChars.charAt(nL);
}
function ascii2native(strAscii) {
var output = "";
var posFrom = 0;
var posTo = strAscii.indexOf("\\u", posFrom);
while (posTo = 0) {
output += strAscii.substring(posFrom, posTo);
output += toChar(strAscii.substr(posTo, 6));
posFrom = posTo + 6;
posTo = strAscii.indexOf("\\u", posFrom);
}
output += strAscii.substr(posFrom);
return output;
}
function toChar(str) {
if (str.substr(0, 2) != "\\u") return str;
var code = 0;
for (var i=2; istr.length; i++) {
var cc = str.charCodeAt(i);
if (cc = 0x30 cc = 0x39)
cc = cc - 0x30;
else if (cc = 0x41 cc = 0x5A)
cc = cc - 0x41 + 10;
else if (cc = 0x61 cc = 0x7A)
cc = cc - 0x61 + 10;
code = 4;
code += cc;
}
if (code 0xff) return str;
return String.fromCharCode(code);
}
//--/script
body style="font-family: 宋体"
form name="theForm"
Type in the message here, and click a command button:
br /
textarea name="theText" cols="80" rows="20" wrap="off"/textarea
br /
input type="button" value="native to ascii"
onClick="document.theForm.theText.value=native2ascii(document.theForm.theText.value);"
input type="button" value="ascii to native"
onClick="document.theForm.theText.value=ascii2native(document.theForm.theText.value);"
/form
/body
/html
加密:escape(要加密的字符串)
解密:unescape(要解密的字符串)
返回的也都是字符串
不是加密,是编码格式的问题,以下两个方法是可以还原,decodeURI(xxx);decodeURIComponent(xxx);不懂可以搜这两个方法的说明,很详细的,