Javascript RSA 加密到 Java BouncyCaSTLe 解密

标签 javascript encryption rsa

我们正在与运行 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代码。

我已经尝试过:

都没有成功。

谁能给我一个用 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/

相关文章:

javascript - 为什么 GoogleMap 在我的 .net 项目中不显示 key,而显示 v

python - PDF Miner PDF加密错误

python - 减少 Python 中 RSA 解密的时间

python - python中的RSA加密和JS中的解密

javascript - indexeddb 从对象存储中获取所有键

javascript - For...in 循环不从 JSON 对象列表返回值

java - 用java编写多表转置密码

cryptography - 为什么 Google、Facebook 等网站使用公钥加密技术(这些网站中需要对数据进行编码)?

javascript - 将对象数据获取到 Angular 中的变量

php - 如何在 PHP 中解密由 SQL Server 的 EncryptByPassPhrase() 加密的字符串?