使用 SubtleCrypto 加密某些内容,然后使用加密模块解密

问题描述 投票:0回答:1

目前我有一个请求将我们的客户端代码从使用nodejs加密模块更改为SubtleCrypto Web API。问题是,我正在使用 SubtleCrypto 和非对称加密(使用公共和私有)加密某些内容,但是当我将加密数据发送到服务器(使用加密模块并且我无法更改它)时,我收到了类似的错误这个:

错误:02000079:rsa例程::oaep解码错误

如何使用微妙.加密方法加密某些内容并使用

crypto.privateDecrypt
方法解密?

我的加密代码如下所示:

const encryptedArrayBuffer = await webcryptoAPI.subtle.encrypt(
    {
      name: 'RSA-OAEP',
    },
    key,
    encoded
  );

我预计解密会成功,但看起来这两个库之间存在兼容性问题。

这是我在客户端(下一个应用程序)的代码。我无法访问 BE 服务器,但我知道他们使用

crypto.privateDecrypt

const ASYMMETRIC_ALGORITHM = 'RSA-OAEP';
const ENCODING = 'base64';

async function importAsymmetricPublicKey(secretKey) {
  try {
    const publicKeyPEM = secretKey
      .replace(/-----BEGIN PUBLIC KEY-----/, '')
      .replace(/-----END PUBLIC KEY-----/, '');

    const publicKeyBase64 = publicKeyPEM.replace(/\r\n|\n|\r/g, '');

    return await webcryptoAPI.subtle.importKey(
      'spki',
      Buffer.from(publicKeyBase64, ENCODING),
      { name: ASYMMETRIC_ALGORITHM, hash: 'SHA-256', modulusLength: 4096 },
      true,
      ['encrypt']
    );
  } catch (error) {
    console.log('[importAsymmetricPublicKey]: ', error);
  }
}

async function asymmetricEncryptStringKey(publicKey, generatedKey) {
  const key = await importAsymmetricPublicKey(publicKey);


  let encoded = encodeMessage(generatedKey);
  const encryptedArrayBuffer = await webcryptoAPI.subtle.encrypt(
    {
      name: ASYMMETRIC_ALGORITHM,
    },
    key,
    encoded
  );

  return Buffer.from(encryptedArrayBuffer);
}
javascript cryptography encryption-asymmetric subtlecrypto
1个回答
0
投票

我当前方法的问题是我使用了错误的哈希类型。您必须使用@Topaco 提到的 SHA1。

© www.soinside.com 2019 - 2024. All rights reserved.