目前我有一个请求将我们的客户端代码从使用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);
}
我当前方法的问题是我使用了错误的哈希类型。您必须使用@Topaco 提到的 SHA1。