首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加密Fastspring事务的数据和私钥?

如何加密Fastspring事务的数据和私钥?
EN

Stack Overflow用户
提问于 2022-08-04 10:52:21
回答 1查看 93关注 0票数 0

我正试图加密有效载荷和保护快速弹簧事务的密钥。

我跟踪他们的文档https://community.fastspring.com/s/article/Passing-Sensitive-Data-with-Secure-Requests

这是我的数据加密代码

代码语言:javascript
复制
async function encrypt(payload) {
    const aesKey = crypto.randomBytes(16);
    const iv = new Buffer("");
    const cipher = crypto.createCipheriv('aes-128-ecb', aesKey, iv);
        var encryptedPayload = cipher.update(new Buffer(JSON.stringify(payload), 'utf8'), 'utf8', 'base64');
    const securePayload = encryptedPayload + cipher.final('base64');
    const secureKey = crypto.privateEncrypt('MIIEpQIBA.....', iv).toString('base64');
    return {
       securePayload: securePayload,
       secureKey: secureKey
  };
  };

当我试图用有效载荷调用函数时

代码语言:javascript
复制
{
                "contact": {
                    "email": "xxxxxx",
                    "firstName": "xxxxxx",
                    "lastName": "zxxxx"
                },
                "items": "cart"
            }

我有错误

TypeError:不能读取null (读取'2')在t.exports (worker.js:14:163836)在u (worker.js:8:103816)在t.exports as publicEncrypt at e.privateEncrypt (worker.js:14:210199)在worker.js:10:297620 at worker.js:10:300887

问题是在privateEncrpyt函数中,我直接将私钥作为字符串传递。如果有人知道如何解决这个问题,或者给我更多的指导,我会很感激。

我使用cloudflare员工来构建这个。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-04 21:39:26

如果您使用FastSpring文档中给出的用于生成RSA私钥的指令:

代码语言:javascript
复制
openssl genrsa -out privatekey.pem 2048

生成的密钥是PKCS#1格式的PEM编码的私有RSA密钥。这可以在privateEncrypt()的第一个参数中导入,如下所示:

代码语言:javascript
复制
var pkcs1pem = `-----BEGIN RSA PRIVATE KEY-----
MII...
-----END RSA PRIVATE KEY-----`;  
...
const secureKey = crypto.privateEncrypt(pkcs1pem, aesKey).toString('base64');

为了完整起见:密码支持PKCS#1格式之外的私密RSA密钥,也支持PKCS#8格式,除了PEM编码之外,还支持DER编码。

关于FastSpring加密方法的说明:

使用privateEncrypt()和FastSpring指定的私钥加密AES密钥实际上是错误的方法。privateEncrypt()用于创建签名(作为低级别签名过程的一部分)。签名的目的不是为了保密数据,而是为了验证数字消息的真实性。从签名(至少在这里创建时),原始数据,即AES密钥,可以很容易地使用公钥进行重构。由于一般情况下,任何人都可以拥有公钥,因此AES密钥就被破坏了。

FastSpring方法的基本问题是实际的公钥必须保密,引用FastSpring:创建一个2048位的RSA公钥。只与FastSpring共享此密钥。然而,公开钥匙的保密在实践中没有得到保障(除了它与公钥的概念相矛盾这一事实之外)。例如,公钥可能在传输到FastSpring期间被截获,或者可能被FastSpring本身意外泄漏,等等。

正确的方法是用publicEncrypt()和FastSpring的公钥对AES密钥进行加密。然后保证只有FastSpring才能解密加密的AES密钥,因为只有FastSpring才有私钥。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73234642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档