我正在使用API开发项目。现在我正在尝试加密数据,因此没有人可以编辑它。我想过使用公钥加密数据和私钥来加密公钥和(加密数据)。但我无法使用API uri发送此加密数据,因为它包含' /'字符。
加密我的JSON数据的最佳方法是什么,所以没有人可以编辑它?
这是Json的一个例子:
{
"Name": "HP Laptop",
"Category": "Laptop",
"Price": 300,
"Currency": "OMR",
"details": "core i 5 ",
"productID": 1,
"Quantity": 10
}
答案 0 :(得分:1)
对于任何安全协议,最好始终遵守标准。永远不要试图发明自己的协议..你可能最终弊大于利。如果此数据是通过HTTP进行的,则可以随意使用SSL(HTTPS)来防范MiTM攻击,例如:窃听和篡改。但是,我认为你正在寻找不同的东西。
虽然SSL应该确保数据在旅途中不被篡改,但您可能自己正在执行此操作,例如,有人向您提供了一些数据,而您不确定它是否未被篡改。要执行此操作,请自由利用该数据的数字签名,其中您拥有数字签名的私钥。
这样的事情:
Verify(public, signedDocument, json) = True
对json进行签名。 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()
如果文档已被篡改与(再次有可能性极高)。以下是关于合理技术倾向的数字签名的首次阅读: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