今天在原来的系统上增加网页操作的功能,原来系统是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加密的相关代码是这样的:
我们原来的密钥是通过OPENSSL命令行工具生成的,是一个PEM文件,打开后内容是这样的:
开始的时候我是把这段内容去掉换行符连在一起做为公钥,代码像这样
加密完以后,一解密就出错,百思不得其解,于是把rsa.js的内容格式化了一下,发现javascript里的公钥是16进制的字符串,而我的公钥是BASE64的字符串,找到原因后就好做了。
把原来的JAVA里实现 的RSA加密函数改了一下,把BASE64的公钥转成16进制的字符串,心想这下应该没问题了吧,代码如下:
这个系统是一个移动电话会议系统,是手机上就能发起电话会议的为数不多的几个系统之一。
以前开发系统的时候是参考这篇文章写的 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>
把原来的JAVA里实现 的RSA加密函数改了一下,把BASE64的公钥转成16进制的字符串,心想这下应该没问题了吧,代码如下:
private
static
final
String
RSA_PUBLICE
=
"MIGfMA0GC