我正在使用mgo保存在mongo中的結構。我希望用這個結構(和一個祕密)的散列來保存它們以確定它們是否被篡改(並且我不希望mongo db本身具有這個祕密)。mgo bson marshalling是否可以保證結構組件的順序?
目前我使用gob
對結構進行序列化來散列結構,這些結構組件的排序是明確定義的。這很好,除了當我重新讀取芒果結構時,事情已經發生了變化 - 準確地說,與mongo相比,mongo中的時間值被截斷了 - 因此哈希值不匹配。
我計劃的工作圍繞這僅僅是爲了編組和解組從BSON的結構計算散列之前,即:
- 元帥結構來BSON 從BSON(從而失去對時間精度
- 解組結構)
- 馬歇爾結構來採空區和散列結果
[]byte
- 認沽散列結構
- 保存結構來蒙戈
現在,這是多一點迂迴。
如果我能保證的是,BSON本身始終保留在結構部件的順序,我可以:
- 元帥結構來BSON
- 哈希結果
byte[]
- 認沽散列結構
- 保存struct to mongo
哪一個會更不討厭(儘管它仍然會需要兩次轉換爲BSON)。
任何想法?
我不知道任何保證兩個相同值的gob編碼會產生相同的字節。 –
@BravadaZadada好吧,如果不是這將是另一個使用BSON的理由(假設它是真的,否則搜索會很難) – abligh
Mgo按定義順序對結構字段進行編碼,但在文檔中沒有看到任何保證順序的東西。 Mgo自己的測試假定字段按定義順序編碼。我建議向mgo提出一個問題,要求將訂單記錄在案。 –