RSA是网站中经常用到了的加密算法,看到群友忙活了半天还搞不定抠下来的代码 ,总是报错,都不知道怎么解决这些报错问题。我在这里稍微提一下吧。
上次提到的Github地址:
https://github.com/travist/jsencrypt/blob/master/bin/jsencrypt.js
将整个代码复制下来,保存到电脑上,我这里保存到了F盘(rsa.js),用 node直接运行下吧:
报错,提示是 navigator 未定义,我们知道navigator 是浏览器的内置对象,在node环境里面是没有,那我们就定义一个好了。你可以如下定义:
var navigator = {};//先这么定义,如果报错了再改
将这行代码添加到文件(我这里是rsa.js)的最顶端,保存后再次运行:
再次报错,但这次不一样了,说明之前的报错问题可能已经解决了。这行报错是 window 未定义,我们知道 window 是 浏览器的全局对象,在node里面是没有的,但是node里面的有另外的 全局对象 global,代码里面有多window对象的调用,如果简单的 定义一个 window = {} 肯定是不行的,那我们可以把node的全局对象赋值给 window 这个自定义的变量(在node里面,window只是你自定义的一个变量名,和a,b,c没啥区别),使得window这个变量具有全局属性,即:
var window = global;
添加到文件的第二行,并保存,如下图:
再次运行,看看效果:
发现不报错了, 这种情况十有八九表示已经成功了。下面我们来进行验证。
RSA的加密过程如下:
(1)A生成一对密钥(公钥和私钥),私钥不公开,A自己保留。公钥为公开的,任何人可以获取。
(2)A传递自己的公钥给B,B用A的公钥对消息进行加密。
(3)A接收到B加密的消息,利用A自己的私钥对消息进行解密。
在这个过程中,只有2次传递过程,第一次是A传递公钥给B,第二次是B传递加密消息给A,即使都被敌方截获,也没有危险性,因为只有A的私钥才能对消息进行解密,防止了消息内容的泄露。
看了上面的描述相信你对RSA加密有所了解,即公钥加密,私钥解密。公钥可以多人拥有,但是加密过的数据,只有拿到私钥才能解开,所以破解RSA加密字符串的可能行几乎为0.
打开如下网站生成一对密钥吧:
http://web.chacuo.net/netrsakeypair
我这里生成的密钥对是这样的:
分别在文件中对其进行设置:
然后分别进行加密和解密:
再次在node上面运行,看看结果:
可以看到 这里 加密字符串和解密的字符串都有了,并且与加密前的字符串是一样的,说明代码没有问题。
干就完了!
欢迎关注本人微信公众号,会分享更多的干货: