
请高人指点一段javascript加密算法的思想...急!!!! 5
<!--BeginfunctionEncrypt(str,pwd){if(str=="")return"";str=escape(str);if(!pwd||pwd=="...
<!-- Begin
function Encrypt(str, pwd) {
if(str=="")return "";
str = escape(str);
if(!pwd || pwd==""){ var pwd="1234"; }
pwd = escape(pwd);
if(pwd == null || pwd.length <= 0) {
alert("Please enter a password with which to encrypt the message.");
return null;
}
var prand = "";
for(var I=0; I<pwd.length; I++) {
prand += pwd.charCodeAt(I).toString();
}
var sPos = Math.floor(prand.length / 5);
var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5));
var incr = Math.ceil(pwd.length / 2);
var modu = Math.pow(2, 31) - 1;
if(mult < 2) {
alert("Algorithm cannot find a suitable hash. Please choose a different password. \nPossible considerations are to choose a more complex or longer password.");
return null;
}
var salt = Math.round(Math.random() * 1000000000) % 100000000;
prand += salt;
while(prand.length > 10) {
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
}
prand = (mult * prand + incr) % modu;
var enc_chr = "";
var enc_str = "";
for(var I=0; I<str.length; I++) {
enc_chr = parseInt(str.charCodeAt(I) ^ Math.floor((prand / modu) * 255));
if(enc_chr < 16) {
enc_str += "0" + enc_chr.toString(16);
}else
enc_str += enc_chr.toString(16);
prand = (mult * prand + incr) % modu;
}
salt = salt.toString(16);
while(salt.length < 8)salt = "0" + salt;
enc_str += salt;
return enc_str;
}
// End -->
</Script> 展开
function Encrypt(str, pwd) {
if(str=="")return "";
str = escape(str);
if(!pwd || pwd==""){ var pwd="1234"; }
pwd = escape(pwd);
if(pwd == null || pwd.length <= 0) {
alert("Please enter a password with which to encrypt the message.");
return null;
}
var prand = "";
for(var I=0; I<pwd.length; I++) {
prand += pwd.charCodeAt(I).toString();
}
var sPos = Math.floor(prand.length / 5);
var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5));
var incr = Math.ceil(pwd.length / 2);
var modu = Math.pow(2, 31) - 1;
if(mult < 2) {
alert("Algorithm cannot find a suitable hash. Please choose a different password. \nPossible considerations are to choose a more complex or longer password.");
return null;
}
var salt = Math.round(Math.random() * 1000000000) % 100000000;
prand += salt;
while(prand.length > 10) {
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
}
prand = (mult * prand + incr) % modu;
var enc_chr = "";
var enc_str = "";
for(var I=0; I<str.length; I++) {
enc_chr = parseInt(str.charCodeAt(I) ^ Math.floor((prand / modu) * 255));
if(enc_chr < 16) {
enc_str += "0" + enc_chr.toString(16);
}else
enc_str += enc_chr.toString(16);
prand = (mult * prand + incr) % modu;
}
salt = salt.toString(16);
while(salt.length < 8)salt = "0" + salt;
enc_str += salt;
return enc_str;
}
// End -->
</Script> 展开
展开全部
这个加码程序是利用随机码进行加密的,从我初步的判断就是利用了一个随机数而已,然后将这个随机数又用8位16进行在密文的最后累上的。所以很容易找到这个随机的干扰码的,对于加密的过程,写的还不错,但加密的粒度太低,也就是只是对密匙位数进行加密,不过想逆它一般还是很难的,但好在粒度低,就算是用暴破的方法也是很快可以解密的。前提是密匙的不安全性。反算可以通过255次+8421505次就可计算出你的密码。还是由于粒度低,密文碰撞性比较大。好像没有很好的处理。str就是这时原密匙,而pwd则是密码,待加密字符。而生成出来的就是明文可以在网上任何传播的。
这个程序基本上实现了加密的几个要素。思想不错,便由于粒度低,再加上本身JS的不安全性,所以还是比较脆弱的。至于说算法,在密码学上加密的算法本身就是公开的。一楼的,JS暴出来又如何?
这个加密方法也有它自身的好处,SHA1和MD5都是固定位数的加密,而这个是一个动态的长度不固定的加密,如果你愿意,把你的密匙设为8位,则加密的内容是16+8位,当然,如果是设20位时加密的过程则出现48位的。而不是像MD5的16位和32位那么固定。
不过提到了DES和TDES,你不妨借用它们的思想,将加密过的内容,再以同样的方式,再样的密匙再加密一次或二次,破解难度无疑提高了。
一般加密中很少使用^运算的。可以考虑使用|或者是&运算。因为^运算有一个特点就是:A^C=B时,则B^C=A,同时A^C=B,所以降低的破解难度!
sorry,由于上次看这个东西时间短,所以说错了点,不过这个加密还是很不错的。str是待加密的密文,而函数的返回值是加密过的明文,PWD才是密匙,由于对这个算法很感兴趣,便下从回家时看了看,原来这个是一个对称加密的方式。写的很好,如果密匙不是泄露的原因,还是要过255次+8421505次的试验才可得到正确的结果,所以说,加密的粒度低。便由于是动态的,且由于程序短小适合对于大量的文本加密,那么破解就变得不那么容易了。首先一次我还是说,加密算法与解密算法是公开的,因为生成明文的过程不依赖于算法。而是依赖于密匙的。只在密匙不泄露就可以了。像这类的算法本身都是公开的也用不着去暴JS代码的。所以根据其加密算法,我已经写出了解密的过程。也就是说你可以将一篇文本加密后发给我,然后只要告诉我密匙,我就能知道具体的内容了。在加密学中,密匙的才是解密的,所以, 如果算法中可以有逆过程时是错误的加密方式,这样的加密过于依赖算法。而想逆一下要多长时间才是衡量一个加密的强度的。比如这个过程要100年(要计算机运算的时间)才能逆,那么相对目前来说是相当安全的。而这个加密却是能对大量文件进行加密的。所以速度上还是很好的,这里我们不能以非对称加密方式去衡量它的安全性。
这个程序基本上实现了加密的几个要素。思想不错,便由于粒度低,再加上本身JS的不安全性,所以还是比较脆弱的。至于说算法,在密码学上加密的算法本身就是公开的。一楼的,JS暴出来又如何?
这个加密方法也有它自身的好处,SHA1和MD5都是固定位数的加密,而这个是一个动态的长度不固定的加密,如果你愿意,把你的密匙设为8位,则加密的内容是16+8位,当然,如果是设20位时加密的过程则出现48位的。而不是像MD5的16位和32位那么固定。
不过提到了DES和TDES,你不妨借用它们的思想,将加密过的内容,再以同样的方式,再样的密匙再加密一次或二次,破解难度无疑提高了。
一般加密中很少使用^运算的。可以考虑使用|或者是&运算。因为^运算有一个特点就是:A^C=B时,则B^C=A,同时A^C=B,所以降低的破解难度!
sorry,由于上次看这个东西时间短,所以说错了点,不过这个加密还是很不错的。str是待加密的密文,而函数的返回值是加密过的明文,PWD才是密匙,由于对这个算法很感兴趣,便下从回家时看了看,原来这个是一个对称加密的方式。写的很好,如果密匙不是泄露的原因,还是要过255次+8421505次的试验才可得到正确的结果,所以说,加密的粒度低。便由于是动态的,且由于程序短小适合对于大量的文本加密,那么破解就变得不那么容易了。首先一次我还是说,加密算法与解密算法是公开的,因为生成明文的过程不依赖于算法。而是依赖于密匙的。只在密匙不泄露就可以了。像这类的算法本身都是公开的也用不着去暴JS代码的。所以根据其加密算法,我已经写出了解密的过程。也就是说你可以将一篇文本加密后发给我,然后只要告诉我密匙,我就能知道具体的内容了。在加密学中,密匙的才是解密的,所以, 如果算法中可以有逆过程时是错误的加密方式,这样的加密过于依赖算法。而想逆一下要多长时间才是衡量一个加密的强度的。比如这个过程要100年(要计算机运算的时间)才能逆,那么相对目前来说是相当安全的。而这个加密却是能对大量文件进行加密的。所以速度上还是很好的,这里我们不能以非对称加密方式去衡量它的安全性。
展开全部
这个加密试了一下,比其他常用的算法位数低了很多,所以不太安全
加密算法里sha1大概是最简单的了,还有md5,des,blowfish,aes
这些算法的javascript版本我都有
加密算法里sha1大概是最简单的了,还有md5,des,blowfish,aes
这些算法的javascript版本我都有
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
javascript加密很不安全,通过地址栏可以把你的javaScript爆出来
你的加密也就不安全了!
建议你用MD5很方便
而且又javascript版本的MD5
你的加密也就不安全了!
建议你用MD5很方便
而且又javascript版本的MD5
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询