‘壹’ jsencrypt实现前端RSA非对称加密解密(vue项目)
最近一个vue项目要求所有密码数据需要使用RSA非对称加密传输,以为挺简单,结果开发过程中还是遇到了些问题,简单做个笔记。同时也希望可以帮助到遇到同样问题的道友门。
重点来了:使用jsencrypt实现RSA非对称加解密
因为这里直接在前端加解密,所以需要一对现成的密钥,我们通过 密钥在线生成器 得到:
然后在需要使用的文件中引入JSEncrypt,我是将所有工具函数都封装在一个js文件的,我就直接在该文件中引入,我看也有人是在main.js中引入的。
到这里我们的加密解密方法就完成了,在需要的地方直接拿过来用就好了!
大功告成!这样就完了?我以为这样就ok了。
当然,如果没有遇到这个bug,就可以忽略下面的内容了。
从上面截图可以看到,重启项目的时候报错: navigator is not defined
而且这个bug有点奇葩,先启动项目再引入jsencrypt就什么问题都没有,但是先引入jsencrypt再启动项目就报错。这也是我前面能顺利执行的原因所在。
通过好一通折腾,用了网上的各种方法,比如在main.js引入jsencrypt、引入jsdom之类的,都没能解决这个问题,最终还是在jsencrypt的git相关 issue 下找到了这个问题的解决方案。
到这里问题就算基本解决了,但是由于项目组不止我一个前端,我不能要求每个同事或者以后接手维护项目的同事都要在node_moles中去替换文件。
所以就采用了另外一种方案:将jsencrypt.js通过在线js压缩器压缩至jsencrypt.min.js中,然后把jsencrypt.min.js放到src/assets/jsencrypt文件夹中,就不用npm install的方式了。
换了种方式,jsencrypt的引用方式需要做出相应的调整:
参考链接: RSA非对称加密传输---前端加密&解密(VUE项目)
https://github.com/travist/jsencrypt/issues/144
PS:才疏学浅,如果有考虑不周之处或者有更好的解决方案,欢迎指正探讨!
‘贰’ vue把密钥保存哪里安全
首先:密钥直接明文写在代码里是肯定不可取的!
将密钥保存在文件中,如果是服务器端的话,没什么大问题,你也可以直接将密钥写在代码里。
不存储密钥,使用随机密钥,每次加密的时候的密钥都不一样,需要考虑的就是解密时怎么取到生成的密钥。可以加一些数据来生成密钥,比如用户名、用户密码什么的。4.使用系统提供的密钥容器,进行存储密钥,现在操作系统这么多,存储容器的使用就自己去查看相关操作系统的文档吧。
可以使用电子证书,当然证书你可以存储在操作系统的密钥容器上,或者其它介质中,看你的需要咯。
加强密钥,就是使用多种加密算法,把数据多加密几次,把密钥也加密了。这样的话就是涉及到加密密钥的密钥要存储在哪。
‘叁’ 软件公司要如何保障源代码的安全不会被外泄,不会被员工泄漏
先回答你的问题,然后扩展开说说我的看法。 有些公司是这样做的:为工作场所划分保护级别。 为每台服务器和计算机定义保护级别,并制定相应保护级别下的保护策略,包括授权和访问方法。 将场所分为工作区和上网区,工作区不连外网,上网区是员工共享的非专用机。 封闭所有计算机的外部接口,比如USB口、光驱没有刻录功能、disable蓝牙,不允许计算机和U盘或手机等外设交换数据。 所有对外发的数据统一由高层来接口审核。所有计算机安装后台监控软件,监控操作行为。 普通员工不配置笔记本电脑。 办公空间安装摄像头监视异常行为。 和员工签署保密协议。等等上面的措施的确能起到一定保护作用,但是不能保证绝对不发生问题:公司开展业务必然要和外部进行信息交流,即使在硬件上做到了上述这些,如果真有居心不良的员工,那么只是增加了作案的难度,只要能上网,想把信息传到外部还是有办法的,比如把想窃取的信息通过编码的方式打包到正常外发的文件里。 可以在摄像头死角的地方,暴力破坏计算机,或者把计算机硬盘拆下来拿回去研究。 最不济还可以把核心代码写到笔记上,你总不能不让员工写读书笔记吧。 互联网公司产品的很多代码都是基于开源框架演化来的,有些开源许可是基于GPL的,是要求其衍生物是免费开放源代码的。虽然有很多公司会取巧地绕开这个限定条件。 对于游戏公司,设计、策划、代码的保护是蛮重要的,因为开发期的游戏设计一旦外漏,很可能就失去了市场先机。 照我看,除了专用算法、特定的格式保护、极少数产品本身固有的设计、某些特殊行业(比如网游)之外,很多代码都是通用的,可开放的。有以下一些建议:清晰自己所在的行业特点,对代码外泄做个风险评估,确定保护代码安全的思路和策略; 划分核心代码和非核心代码,分别制定保护策略; 在核心代码上下功夫,能接触这些代码的人一定是可以信任的人,尽可能地少,但也要考虑备份人选; 把核心代码做成编译好的库供程序调用,这样就能降低核心代码泄漏的风险; 员工入职签署保密协议; 选拔高层注重品德和忠诚度,签订竞业保护协议; 最后公司领导要有一个开放心态,正因为有开源的出现,才促进了计算机软件的发展,固守着自己的一亩三分地,早晚要被对手超越。想在竞争中脱颖而出,首先要去除管理者的保守心态。开放、公平竞争才让公司更有底气和信心。