https://github.com/travist/jsencrypt
通过测试案例:
http://yajiao.iteye.com/blog/1772835
问题:1.getJsPublicKey的JCERSAPublicKey要改成BCRSAPublicKey
2.decodeJsValue里注释后面的 // 标志位为0之后的是输入的有效字节 实际上把Cipher.getInstance("RSA","BC"); 换成Cipher.getInstance("RSA/None/PKCS1Padding", "BC"); 就不用再特殊处理输出
3.http://www.justabug.net/door-1-rsa/ 写到:
我们读取到公钥后,需要用到RSAPublicKey的getModulus()和getPublicExponent()方法取得公钥的e(Exponent)和n(Modulus)给到前端页面,前端可以用getparameter等方法接收,或者在页面初始化时用ajax请求。
1 | String Modulus=RSAPublicKey.getModulus().toString( 16 ); |
2 | String Exponent=RSAPublicKey.getPublicExponent().toString( 16 ); |
这里需要toString(16)把他转为16进制,供前端使用
在此案例里配合使用的js版本,给的是geModules().toString(16),而不是直接的RSAPublicKey.getEncoded()
5.keyPairGen.initialize(KEY_SIZE, new SecureRandom()) 给定seed,基本能固定公钥私钥不变,方便测试结果
http://wlh.iteye.com/blog/134796 基本与前一种方法一样,这里要吐槽下后端,跟我说RSAPublicKey是一个复杂的对象,怎么给公钥字符串给我,我。。。就不能好好看看文档接口嚒,明明有getEncode(),byte[] 转字符串也不会,我。。。
http://sunxboy.iteye.com/blog/209156 这个版本的js跟第一个版本差不多一样,用的是getModules()
https://www.cnblogs.com/woodk/p/5918661.html 这个版本的js用的JSEncrypt,给的公钥是New String(Base64.encodeBase64(publickey.getEncoded)),因为这个版本的js里面解出n和e是先base64.decode的,返回的encrypt结果也是hex2b64过,但是我看到解出的n和之前的版本的n一样,然后用去掉hex2b64的encrypt结果塞到第一个案例去测试,始终还是没有正确结果,生成的代码比对是一样,不知道问题出在哪里。。。
http://blog.csdn.net/defonds/article/details/42775183 这篇文章也可以看看
内网这个登陆的sign验证跳过了,希望跟平台能对起来吧,估计悬。。。