【发布时间】:2020-09-17 09:03:24
【问题描述】:
我们正在尝试使用 AWS KMS 中的非对称密钥进行加密和解密。密钥配置如下:
在 NodeJS 中,我们使用公钥通过 crypto.publicEncrypt 进行加密:
const encryptRSAPayload = (buffer, publicKey) => {
const encryptedBuffer = crypto.publicEncrypt(
{
key: publicKey,
oaepHash: 'sha256',
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
},
buffer
);
return encryptedBuffer;
};
我们使用这样的函数(在最小复制期间从本地文件中读取公钥):
const plainText = '12345678910';
const encrypted = await encryptRSAPayload(Buffer.from(plainText), publicKey);
现在,四个开发人员运行了完全相同的代码(压缩、使用公钥等),正在发生这种情况:
注意:所有开发人员都使用最新的 OSX 系统。
我们中的两个人可以使用 AWS 解密我们从 encrypt 函数生成的任何内容,而另外两个人不能(失败,IvalidCiphertext: null)来自 AWS。
其中一台机器无法加密 -> 解密的加密 base64 字符串无法在任何其他机器上解密。
来自可以加密 -> 解密的机器之一的加密 base64 字符串,可以在任何机器的 aws 中解密。
到目前为止,我花了两天时间在这上面,有点不知所措。有什么想法吗?
【问题讨论】:
-
密钥错误,编码错误我们无法判断。
-
有什么办法缩小范围吗?不是错误的关键,因为完全相同的代码可以在不同的机器上运行;包括相同的压缩密钥。
-
对输入进行二进制比较,以十六进制表示,然后比较模数。如果那些。否则,您通常必须在 OAEP 中试验散列函数,实现不太可能出错。确保例如如果您自己设置键值而不是一次全部解码键,则模数不会被解释为负值。
-
谢谢,我看看!
标签: node.js amazon-web-services cryptography aws-kms