一、Demo文档目录结构
RSAdemo -------- 根目录
|---------------- js文件夹(RSA library包括jsbn.js、prng4.js、rng.js、rsa.js四个文件)
|---------------- openssl文件夹(RSA密钥生成工具,基于openssl协议)
|---------------- php文件夹(包含lib文件rsa.php和php解密部分代码rsa-example.html)
|---------------- phpCreateKey(php代码实现:根据pem密钥文件生成加密解密过程所需的参数)
|---------------- rsa-example.html(demo示例页面)
二、openssl协议生成RSA密钥文件
1.打开openssl客户端,路径:RSAdemo/openssl/bin/openssl.exe
2.参考openssl目录下说明文档中的命令,生成pem密钥文件。注意密钥文件生成在openssl/bin目录下
三、基于密钥文件生成密钥参数(用于JS加密函数和PHP解密函数)
1.复制第二步中生成的RSA私钥文件命名为key.pem并替换phpCreateKey目录下的key.pem示例文件
2.或者也可以修改<span style="font-family:SimSun; font-size:18px">phpCreateKey目录下的代码文件var.php,确保读取的RSA私钥文件正确!
3.直接请求var.php即返回需要的密钥参数
四、JS实现RSA加密
1.rsa-example.html实现了加密业务
2.需要引用js文件夹目录下的四个文件
3.加密实现代码:
<pre name="code" class="javascript"> <span style="font-size: 18px;">//RSA加密,需要的公钥和指数两个参数均是在第三步中生成 </span>
function do_encrypt() { var rsa = new RSAKey();//实例化RSA对象 rsa.setPublic(public_key, exponent); var res = rsa.encrypt(document.rsatest.plaintext.value); return res; }
4.运行示例
五、PHP实现RSA解密
1.rsa-example.php实现了加密业务
2.需要引入rsa.php文件
3.解密实现代码:
<span style="font-family: Arial, Helvetica, sans-serif;"> //调用rsa_decrypt函数解密密文,注意解密的密文必须是二进制数据,而第三步中的JS加密结果是16进制数据 </span>
$decrypted = rsa_decrypt($encrypted, $private, $modulus, $keylength);
4.运行示例
六、扩展
前面提到了,RSA算法广泛应用于非对称加密和数字签名!本文所使用的JS函数库和PHP函数库功能非常完善,这里只是使用了加密解密功能,我在后面也会继续深入学习。
1.JS部分使用了jsbn函数库,http://www-cs-students.stanford.edu/~tjw/jsbn/
2.PHP部分使用了phpseclib函数库,http://phpseclib.sourceforge.net