如何使用 API 加密发送的数据

Moh*_*mri 1 javascript api encryption json

我正在使用 API 开发一个项目。现在我正在尝试加密数据,这样就没有人可以编辑它。我想到使用公钥来加密数据,并使用私钥来加密公钥和(加密数据)。但我无法使用 API uri 发送此加密数据,因为它包含“/”字符。
加密 JSON 数据以便无人可以编辑的最佳方法是什么?
这是 Json 的示例:

{
        "Name": "HP Laptop",
        "Category": "Laptop",
        "Price": 300,
        "Currency": "OMR",
        "details": "core i 5 ",
        "productID": 1,
        "Quantity": 10
    }
Run Code Online (Sandbox Code Playgroud)

Tr1*_*er0 6

对于任何安全协议,最好始终遵守标准。永远不要尝试发明自己的协议。您最终可能弊大于利。如果此数据通过 HTTP 传输,则可以随意使用 SSL (HTTPS) 来防范 MiTM 攻击,例如窃听和篡改。但是,我认为您正在寻找不同的东西。

虽然SSL应确保数据在旅行时不被篡改,但您可能自己执行此操作,例如,有人给您一些数据,而您不确定它是否未被篡改。要免费执行此操作,请利用该数据的数字签名,其中数字签名的私钥由您持有。

像这样的东西:

  1. 生成密钥对(私有、公共)。
  2. 使用私钥对 json 进行签名Sign(json, private) -> signedDocument
  3. 现在,稍后当您想要验证没有人篡改它时:Verify(public, signedDocument, json) = True文档是否未被篡改(概率极高)以及False文档是否已被篡改(概率再次极高)。

对于有相当技术倾向的人来说,这是关于数字签名的精彩初读: https: //en.wikipedia.org/wiki/Digital_signature

我相信这可能是 JS 入门的好地方: http: //www-cs-students.stanford.edu/~tjw/jsbn/(我希望斯坦福大学在实施 RSA 方面做得不错,但请随意四处寻找更标准的东西..如果这是Java,那么它可能会更容易...也许编写一个CryptoWebServer来支持此操作?)

为了进一步参考,我相信这个库现在在这里维护: https: //github.com/kjur/jsrsasign/wiki/Tutorial-for-Signature-class

我直接从图书馆的教程中获取了一个签名+验证的示例。请注意,这仅解决了签名和验证的问题,您仍然需要生成公钥/私钥对。

签署消息“aaa”(您将在此处使用 .json 有效负载):

// initialize
var sig = new KJUR.crypto.Signature({"alg": "SHA1withRSA"});
// initialize for signature generation
sig.init(rsaPrivateKey);   // rsaPrivateKey of RSAKey object
// update data
sig.updateString('aaa')
// calculate signature
var sigValueHex = sig.sign()
Run Code Online (Sandbox Code Playgroud)

以下是签名验证的示例:

// initialize
var sig = new KJUR.crypto.Signature({"alg": "SHA1withRSA"});
// initialize for signature validation
sig.init("-----BEGIN CERTIFICATE-----(snip)"); // signer's certificate
// update data
sig.updateString('aaa')
// verify signature
var isValid = sig.verify(sigValueHex)
Run Code Online (Sandbox Code Playgroud)