我们正在与运行Java API的第三方打交道。他们处理网上银行/金融等,他们的一个要求是敏感数据在发送到我们的服务器之前在浏览器中加密。 (从我们的服务器,数据被发送到他们的,除了非常基本的验证之外没有被触及)。我们无法改变这一要求。
我们的客户是一个HTML5网站,需要能够加密某些敏感的提交表单数据,同时将其他部分保留为纯文本(所以不对JCryption)
我读过许多S.O.人们有想法但没有解决方案的线索。
作为一个起点,我们使用了BouncyCastle jar来解密传入的JS字符串的Java:
/**
* 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库,结果不佳(使用/下载他们的演示页)交换在我自己的公共/私有PEM文件中,所有以下库都可以加密和解密字符串,但这些加密的字符串不是由上述Java代码解密。
我试过了:
有人能指出一个由Java解密的JS加密工作示例吗?
(顺便说一下,是的,我们的团队知道JS对加密的不适用性。但这是复杂安全设置中的又一步,即使它确实只是一小步)
答案 0 :(得分:1)
所以它似乎一直都是公钥。它非常精致,我正在使用提供给我的PEM文件。在整个过程中它似乎得到了HTML编码,这意味着它无法正常工作。
使用JSEncrypt这对我们有用 - 并且可以通过上面的Java解密
var rsa = new JSEncrypt();
rsa.setPublicKey(rsaPublicKey);
return rsa.encrypt(input);