我所知道的加密和解密

上一篇文章中提到个人的隐私信息一旦被泄露后果还是比较严重的,所有涉及到重要的数据一定要加密,使用的时候再解密就可以了,但是大家都知道重要的数据需要加密,到底什么加密?怎么样加密才能保证安全呢?加密的原理是什么?

之前的加密通常是通过一些简单的算法,比如说移位、加减乘除等,这样的算法本身难度不大,很容易多搜集一些密文就可以了,加以统计分析就可以了。

一旦密码被破译掉,那么以后所发的所有密文都会相当于是明文了。

有经验的密码设计者会是一个明文对应多个密文,然后随机的出现密文,以增加破解的难度。比如:“国家”对应的密文有多个:0152/3659/4168/8546然后在使用“国家”的时候,随机的出现这些密文中的一个即可,破解者很难知道这些密文其实对应着同一个明文。

加密和解密对应的在数学中就是函数和反函数的关系。明文加密就是通过函数加密,解密就是通过反函数来解密。

现在常用的加密方式中一般会有两个密钥:一个公钥,一个私钥。公钥是给加密人的,私钥是给解密人的。通过公钥加密后的密码只能通过私钥才能解密,密文不能通过公钥或者其他的密钥来解密,以保证数据的安全。

常用的RSA加密算法:
1.找两个很大的质数,P和Q,求出他们的乘积:N=P×Q M=(P-1)×(Q-1)
2.找一个和M互质的整数E;
3.找一个整数D,使得E×D除以M余1,即:E×D%M=1;

那么这个密码系统就设计好了,其中E是公钥,用来加密,D是私钥,用来解密。

要想破解这个算法,只有一个办法那就是:。这是最笨的算法也是最聪明的办法。就是使用计算机把所有可能的数字都试一遍,拼的就是计算的速度。

有一点需要大家知道的,世界上没有绝对安全破解不了的密码,关键是看这个算法的有限期是多长。

java加密解密 function encrypt(str, 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 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; } function decrypt(str, pwd) { if(str == null || str.length < 8) { alert("A salt value could not be extracted from the encrypted message because it's length is too short. The message cannot be decrypted."); return; } if(pwd == null || pwd.length <= 0) { alert("Please enter a password with which to decrypt the message."); return; } var prand = ""; for(var i=0; i 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+=2) { enc_chr = parseInt(parseInt(str.substring(i, i+2), 16) ^ Math.floor((prand / modu) * 255)); enc_str += String.fromCharCode(enc_chr); prand = (mult * prand + incr) % modu; } return enc_str; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值