पर हस्ताक्षर करना मुझे विभिन्न प्लेटफ़ॉर्म और सेवा के कार्यान्वयन के बीच JSON ऑब्जेक्ट्स का आदान-प्रदान करना है और डिजिटल हस्ताक्षर के माध्यम से इसकी अखंडता सत्यापित करना है। तो एक मंच ए ऐसी वस्तु पैदा करेगा और डिजिटल हस्ताक्षर बनाएगा। कहा गया है कि हस्ताक्षर को ऑब्जेक्ट में शामिल किया गया है और प्लेटफॉर्म बी को भेजा गया है। JSON ऑब्जेक्ट्स में मनमाना विशेषताएँ और डेटा हो सकता है।JSON ऑब्जेक्ट्स
उदा। PHP में:
function signObject($jsonObjectToSign, $privateKey) {
$jsonObjectToSign->signature = "";
$msgToSign = json_encode($jsonObjectToSign);
openssl_sign($msgToSign, $jsonObjectToSign->signature, $privateKey, OPENSSL_SLGO_SHA1);
return $jsonObjectToSign;
}
समस्या यह है कि उदा। जावा में, यह बताने का कोई तरीका नहीं है कि JSON ऑब्जेक्ट के गुण उसी क्रम में होंगे जो आपने उन्हें जोड़ा था (JSONObject.put() के माध्यम से)। तो, अगर मैं PHP में एक
$json = json_encode('{"a":1, "b":2}');
करते हैं, इस वस्तु के रूप में ऊपर कहा गया है पर हस्ताक्षर, एक जावा आधारित सर्वर पर स्थानांतरित करते हैं, json वस्तु को डिकोड और उसके बाद हस्ताक्षर सत्यापित करने का प्रयास करें, मैं शायद एक अलग मिलता था वस्तु के गुणों का क्रम।
तो मुझे जो चाहिए वह एक भाषा या मंच से स्वतंत्र, JSONObject से स्ट्रिंग बनाने का एक विश्वसनीय तरीका है।
उपरोक्त उदाहरण वस्तु को हमेशा {"a":1, "b":2}
आउटपुट और {"b":2, "a":1}
आउटपुट की आवश्यकता होती है। दुर्भाग्यवश, यह सामान्य मामला है उदा। जावा में
क्या JSON ऑब्जेक्ट्स को सुरक्षित तरीके से साइन करने के लिए कोई "सर्वोत्तम अभ्यास" है?
लेकिन मुझे किसी अन्य तरीके से समस्या का वर्णन करते हैं:
मान लीजिए कि मैं जावा में ऐसा करना चाहते हैं (या किसी भी अन्य भाषा) करते हैं:
JSONObject j = new JSONObject();
j.put("a", 1);
j.put("b", 2);
अब, मैं एक क्रमबद्धता समारोह की जरूरत है, कि इस ऑब्जेक्ट के लिए हमेशा एक ही स्ट्रिंग प्रस्तुति आउटपुट करता है, इससे कोई फर्क नहीं पड़ता कि इस ऑब्जेक्ट को किस भाषा के साथ बनाया गया है।
सुनिश्चित नहीं हैं कि अगर [इस] (http://stackoverflow.com/questions/4670494/how-to-cryptographically-hash-a-json-object) एक डुप्लिकेट है, लेकिन यह निश्चित रूप से पढ़ने लायक है। जेएसओएन को पुनरुत्पादित हैश की गारंटी देने के लिए कुछ विचारों का प्रस्ताव दिया गया है। –