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

时间:2017-07-31 09:22:52

标签: javascript json api encryption

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

{
        "Name": "HP Laptop",
        "Category": "Laptop",
        "Price": 300,
        "Currency": "OMR",
        "details": "core i 5 ",
        "productID": 1,
        "Quantity": 10
    }

1 个答案:

答案 0 :(得分:1)

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

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

这样的事情:

  1. 生成密钥对(私有,公共)。
  2. 使用私钥Verify(public, signedDocument, json) = True对json进行签名。
  3. 现在,稍后当您要验证没有人篡改过时:False如果文档未被篡改(极高概率),// 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() 如果文档已被篡改与(再次有可能性极高)。
  4. 以下是关于合理技术倾向的数字签名的首次阅读: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 validation
    sig.init("-----BEGIN CERTIFICATE-----(snip)"); // signer's certificate
    // update data
    sig.updateString('aaa')
    // verify signature
    var isValid = sig.verify(sigValueHex)
    

    以下是签名验证的示例:

    Image