Java脚本 RSA 加密到 Java BouncyCastle 解密

Javascript RSA encrypt to Java BouncyCastle decrypt

我们正在与 运行 Java API 的第 3 方打交道。他们在线交易 banking/finance 等,他们的一项要求是敏感数据在发送到我们的服务器之前在浏览器中加密。 (从我们的服务器,数据被发送到他们的,除了非常基本的验证之外没有任何变化)。我们无法更改此要求。

我们的客户是一个 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);
}

我尝试了多个 Java脚本库,但效果不佳(using/downloading 他们的演示页面)交换在我自己的 public/private PEM 文件中,以下所有库都可以加密和解密字符串,但是那些加密的字符串并没有被上面的Java代码解密。

我试过:

都没有成功。

任何人都可以指出一个由 Java 解密的 JS 加密的工作示例吗?

(顺便说一句,是的,我们的团队知道 JS 不适合加密。但是,这是复杂安全设置中的又一步,即使它只是一小步)

所以它似乎一直都是 public 键。它非常精致,我使用的是提供给我的 PEM 文件。一路上它似乎得到了 HTML 编码,这意味着它不起作用。

使用 JSEncrypt 这对我们有用 - 并且可以通过上面的 Java

解密
var rsa = new JSEncrypt();
rsa.setPublicKey(rsaPublicKey);
return rsa.encrypt(input);