新浪微博登录,QQ登录网页javascript脚本实现RSA加密的原理

本文介绍了如何将JAVA系统的RSA加密应用于网页登录,详细讲解了从JAVA RSA公钥转换到JavaScript加密的过程,包括如何处理公钥格式、加密结果的编码问题,并分享了解决过程中遇到的挑战和解决方案,最终实现JavaScript端的RSA加密。
摘要由CSDN通过智能技术生成
今天在原来的系统上增加网页操作的功能,原来系统是JAVA写的,数据传输用的是RSA加密,为了实现网页登录,研究了javascript的RSA加密方法。

这个系统是一个移动电话会议系统,是手机上就能发起电话会议的为数不多的几个系统之一。

以前开发系统的时候是参考这篇文章写的 http://alunblog.duapp.com/?p=50

前段时间在开发欣所罗门公司自动化营销系统的时候,研究过QQ网页登录方法,里面有RSA加密的脚本。

欣所罗门公司自动化营销系统是一套全自动建立营销数据库的系统。

打开QQ注册页面,把里面的 http://4.url.cn/zc/chs/js/10062/rsa.js下载了下来,然后写了个HTA测试页面。

HTA相当于用网页技术实现的一个桌面程序,非常好用,能够实现绝大多数桌面程序的功能。

QQ注册RSA加密的相关代码是这样的:
 
function  rsaEncrypt ( txt ) {
     var  b = new  RSAKey ;
     b . setPublic ( "C4D23C2DB0ECC904FE0CD0CBBCDC988C039D79E1BDA8ED4BFD4D43754EC9693460D15271AB43A59AD6D0F0EEE95424F70920F2C4A08DFDF03661300047CA3A6212E48204C1BE71A846E08DD2D9F1CBDDFF40CA00C10C62B1DD42486C70A09C454293BCA9ED4E7D6657E3F62076A14304943252A88EFA416770E0FBA270A141E7" ,
     "10001" ) ; return  b . encrypt ( a )
}
rsaEncrypt ( $ ( "password" ) . value )
 
我们原来的密钥是通过OPENSSL命令行工具生成的,是一个PEM文件,打开后内容是这样的:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSipVLWBnTtIaLpSkvtmQTJNFl
INLKNmLufvgp9JIpGgFOYU6f1231QFDhbK2dEykNLwaDmCOVHLpR5fm0b/qhZeJ0
zWGgQ7hOyTISiwUM5PGqwAXlfJRS/ZQXe72l7/+ijBEdTZ3U/5okDQA5QTAVWo9Q
JGqKj1IVL0Hs9JwK8wIDAQAB
-----END PUBLIC KEY-----
 
开始的时候我是把这段内容去掉换行符连在一起做为公钥,代码像这样
 
< script  language = "JavaScript"  type = "text/javascript"  src = "rsa.js" >< /script>
< script  type = "text/javascript" >
function  rsaEncrypt ( txt ) {
     var  b = new  RSAKey ;
     b . setPublic ( "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSipVLWBnTtIaLpSkvtmQTJNFlINLKNmLufvgp9JIpGgFOYU6f1231QFDhbK2dEykNLwaDmCOVHLpR5fm0b/qhZeJ0zWGgQ7hOyTISiwUM5PGqwAXlfJRS/ZQXe72l7/+ijBEdTZ3U/5okDQA5QTAVWo9QJGqKj1IVL0Hs9JwK8wIDAQAB" ,
     "10001" ) ; return  b . encrypt ( a )
}
}
< /script>
 
加密完以后,一解密就出错,百思不得其解,于是把rsa.js的内容格式化了一下,发现javascript里的公钥是16进制的字符串,而我的公钥是BASE64的字符串,找到原因后就好做了。

把原来的JAVA里实现 的RSA加密函数改了一下,把BASE64的公钥转成16进制的字符串,心想这下应该没问题了吧,代码如下:
 
     private  static  final  String  RSA_PUBLICE  =
              "MIGfMA0GC
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值