Bir hizmetin farklı platformları ve uygulamaları arasında JSON nesneleri değiş tokuş etmek ve bütünlüğünü dijital imzalar aracılığıyla doğrulanabilir yapmak zorundayım. Böylece bir A platformu böyle bir nesne oluşturacak ve dijital bir imza yaratacaktır. Söz konusu imza daha sonra nesneye dahil edilir ve B platformuna gönderilir. JSON nesneleri, keyfi nitelikler ve veriler içerebilir.JSON nesnelerini imzalama
E.g. PHP'de: ör.,
function signObject($jsonObjectToSign, $privateKey) {
$jsonObjectToSign->signature = "";
$msgToSign = json_encode($jsonObjectToSign);
openssl_sign($msgToSign, $jsonObjectToSign->signature, $privateKey, OPENSSL_SLGO_SHA1);
return $jsonObjectToSign;
}
Sorun şu ki, örn. Java'da, bir JSON nesnesinin özelliklerinin, onları eklediğiniz sırada (JSONObject.put() aracılığıyla) olup olmayacağını belirtmenin bir yolu yoktur. PHP bir
$json = json_encode('{"a":1, "b":2}');
yaparsanız yani, ben muhtemelen farklı olacaktı, imzayı doğrulamak için deneyin, bir java tabanlı bir sunucuya aktarmak, yukarıda belirtildiği gibi bu nesneyi imzalamak json nesnesi deşifre ve nesnenin özniteliklerinin sırası.
İhtiyacım olan şey, kullanılan dil veya platformdan bağımsız olarak JSONObject öğesinden bir String oluşturmak için güvenilir bir yoldur.
Yukarıdaki örnek nesnenin her zaman {"a":1, "b":2}
ve NEVER {"b":2, "a":1}
çıkışına ihtiyacı vardır. Ne yazık ki, bu olağan durum örn. Java'da.
JSON Nesneleri güvenli bir şekilde imzalamak için herhangi bir "en iyi uygulama" var mı?
Ama beni başka bir şekilde sorunu tarif edelim:
ı Java bunu yapmak istiyor demek (veya başka bir dili) yapalım: Şimdi
JSONObject j = new JSONObject();
j.put("a", 1);
j.put("b", 2);
, bir seri fonksiyonu gerekir ki Bu nesne için her zaman aynı dize temsili çıktıları, bu nesnenin nasıl ve hangi dilde oluşturulduğu önemli değildir.
emin değil http://stackoverflow.com/questions/4670494/how-to-cryptographically-hash-a-json-object) bir kopyası, ama kesinlikle okumaya değer. JSON'un tekrarlanabilir bir karmayı garantilemek için kanonikleştirilmesi için birkaç fikir önerilmiştir. –