首先你的加密后的代码有误,无法执行,应将return(c35?String.fromCharCode(c+29):
修改为return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):
c和35之间的部分你没复制出来
这种加密的算法的解密方法很简单
<html><body>
<div id="test"></div>
<script type="text/javascript">
document.getElementById('test').innerHTML = 将需要破解的代码全部复制过来,注意你原来的代码不对,请通过替换先将上面说的那个错误改正
</script>
</body>
</html>
将上面的代码保存成html文件,打开此文件即可看到加密前的内容,由于你的问题解密后是广告语,所以不在此处给出,自己试一下
一般压缩都经过混淆,如果你看到变量名都是A,B,C,D之类的无规则的命名,那就是被混淆过的,一般来说也很难阅读,就算你 还原了格式。如果是没有混淆的,你可以试试用js的格式化工具来重新格式化一下的,比如:
/* 美化:格式化代码,使之容易阅读 */
/* 净化:去掉代码中多余的注释、换行、空格等 */
/* 压缩:将代码压缩为更小体积,便于传输 */
/* 解压:将压缩后的代码转换为人可以阅读的格式 */
/* 混淆:将代码的中变量名简短化以减小体积,但可读性差,经混淆后的代码无法还原 */
/* 如果有用,请别忘了推荐给你的朋友: */
/* javascript在线美化、净化、压缩、解压:http://tool.lu/js */
/* 以下是演示代码 */
var Inote = {}
Inote.JSTool = function(options) {
this.options = options || {}
}
Inote.JSTool.prototype = {
_name: 'Javascript工具',
_history: {
'v1.0': ['2011-01-18', 'javascript工具上线'],
'v1.1': ['2012-03-23', '增加混淆功能'],
'v1.2': ['2012-07-21', '升级美化功能引擎'],
'v1.3': ['2014-03-01', '升级解密功能,支持eval,window.eval,window["eval"]等的解密'],
'v1.4': ['2014-08-05', '升级混淆功能引擎'],
'v1.5': ['2014-08-09', '升级js压缩引擎'],
'v1.6': ['2015-04-11', '升级js混淆引擎']
},
options: {},
getName: function() {return this._name},
getHistory: function() {
return this._history}
}
var jstool = new Inote.JSTool()
用javascript实现rsa加解密的实现方式是通过PKCS完成的。1、整个定义的function
function pkcs1pad2(s,n) {
if(n <s.length + 11) { // TODO: fix for utf-8
alert("Message too long for RSA")
return null
}
var ba = new Array()
var i = s.length - 1
while(i >= 0 &&n >0) {
var c = s.charCodeAt(i--)
//UTF-8编码为变长字节,使用实际的字节来记录
if(c <128) { // encode using utf-8
ba[--n] = c
}
else if((c >127) &&(c <2048)) {
ba[--n] = (c &63) | 128
ba[--n] = (c >>6) | 192
}
else {
ba[--n] = (c &63) | 128
ba[--n] = ((c >>6) &63) | 128
ba[--n] = (c >>12) | 224
}
}
//实际输入拼装结束,将下一位赋值为0标记结束
ba[--n] = 0
var rng = new SecureRandom()
var x = new Array()
//拼接随机非0字节
while(n >2) { // random non-zero pad
x[0] = 0
while(x[0] == 0) rng.nextBytes(x)
ba[--n] = x[0]
}
//这两位做简单的校验
ba[--n] = 2
ba[--n] = 0
return new BigInteger(ba)
}
该方法中对UTF-8字符进行了兼容,并且在拼装完实际输入的字符后,还拼装了随机的字节,使用拼装后的字符串去加密。由于每次拼装的结果是随机的,这样每次加密后的密文都不同。
2、调用方法:;
function RSAEncrypt(text) {
var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3)
if(m == null) return null
var c = this.doPublic(m)
if(c == null) return null
var h = c.toString(16)
if((h.length &1) == 0) return helse return "0" + h
}