java (jasypt) 中的加密和 nodejs 中的解密

Encryption in java (jasypt) and decryption in nodejs

我正在尝试解密编码字符串(实际上是使用 bouncyCastle 提供程序在 java 中编码的)。因为我在 nodejs 中没有看到 "PBEWITHSHA256AND256BITAES-CBC-BC" 的任何等效算法。你能建议我如何在nodejs中解密encryptedValue(在java中加密)吗?

我尝试了几种方法,但找不到解决方案。

来自 Java: 下面是方法

  1. bouncyCastle 提供商
  2. 算法# PBEWITHSHA256AND256BITAES-CBC-BC
  3. encodedOutputType 为 "Hex"

我们得到了十六进制字符串形式的结果。

来自 Node.js: 我尝试使用 nodejs-crypto 包解密。

  1. 从十六进制字符串转换回数组值
  2. 使用 pbkdf2sync 通过 sha256 创建密钥
  3. 尝试使用crypto.createDecipherIv解密数据 但不知何故我无法在nodejs中解密。

有人可以给我建议方法吗。

该 PBE 方案不是 PBKDF2 (PKCS8) 的实例;它是 PKCS12 PBE 方案的一个实例,它在概念上相似,但在加密中至关重要的细节上有很大不同。您可以 'easily' 通过查找 OID 来判断:https://www.bouncycastle.org/oids.html :-)

我没有看到任何 nodejs-crypto 公开此方案或 PKCS12 的提示,尽管它在内部使用确实实现了这两种方案的 OpenSSL。

您可以按照 RFC 7292 Appendix B and C 中的规范自行编写代码(尽管文档说它已被弃用,但实际上仍被广泛使用)。

或者 https://github.com/digitalbazaar/forge(纯 js)确实支持使用未提及的(内部)模块 forge.pbe.generatePkcs12Key(实际上是密钥 IV)的 PKCS12,这看起来是正确的给我快速扫描(但未测试)。