我们正在与运行 Java API 的第三方打交道。他们从事网上银行/金融等业务,他们方面的一个要求是敏感数据在发送到我们的服务器之前在浏览器中进行加密。 (从我们的服务器,数据被发送到他们的服务器,除了非常基本的验证之外,没有受到任何影响)。我们无法更改此要求。
我们的客户是一个 HTML5 网站,需要能够加密某些敏感的提交表单数据,同时将其他部分保留为纯文本(因此 JCryption 不行)
我读过很多S.O.人们有想法但没有解决方案的线程。
作为起点,我们有 Java,它将使用 BouncyCaSTLe jar 来解密传入的 JS 字符串:
/**
* Decrypt text using private key.
*
* @param toBeDecrypted encrypted text
* @param key the private key
* @return the unencrypted value
*/
public String decrypt(String toBeDecrypted, PrivateKey key) throws GeneralSecurityException {
// Local variables
byte[] dectyptedText;
final Cipher cipher;
dectyptedText = null;
// get an RSA cipher object and print the provider
cipher = Cipher.getInstance(ALGORITHM_CIPHER);
// decrypt the text using the private key
cipher.init(Cipher.DECRYPT_MODE, key);
dectyptedText = cipher.doFinal(Base64.decodeBase64(toBeDecrypted.getBytes()));
return new String(dectyptedText);
}
我尝试了多个 JavaScript 库,结果很差(使用/下载它们的演示页面),交换我自己的公共(public)/私有(private) PEM 文件,以下所有库都可以加密和解密字符串,但这些加密的字符串不会被解密上面的Java代码。
我已经尝试过:
- http://www.ohdave.com/rsa/
- http://travistidwell.com/jsencrypt/
- http://www-cs-students.stanford.edu/~tjw/jsbn/
- http://ats.oka.nu/titaniumcore/js/crypto/readme.txt
都没有成功。
谁能给我一个用 Java 解密 JS 加密的工作示例吗?
(顺便说一句,是的,我们的团队知道 JS 不适合加密。然而,这只是复杂安全设置中的又一步,即使它确实只是一小步)
最佳答案
所以它似乎一直都是公钥。它非常微妙,我使用的是提供给我的 PEM 文件。一路走来,它似乎已进行 HTML 编码,这意味着它不起作用。
使用JSEncrypt这对我们有用 - 并且可以通过上面的 Java 解密
var rsa = new JSEncrypt();
rsa.setPublicKey(rsaPublicKey);
return rsa.encrypt(input);
关于Javascript RSA 加密到 Java BouncyCaSTLe 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28045363/