簡體   English   中英

提升和谷物序列化的完整性

[英]Boost and cereal serialization integrity

我查看了 Boost Serialization 和 Cereal 庫的文檔,但沒有找到任何具體內容。 我想知道是否可以對序列化數據進行完整性檢查。 我不是在談論安全方面,但如果由於任何原因保存的文件已損壞,則加載的數據可能完全錯誤。 這些庫中是否支持有關這方面的任何內容? 我想自己實現類似的東西,但是兩個庫的加載階段都存在問題:

template<class Archive>
void load(Archive& ar) {
   //checksum here??
   ar >> mydata;
}

為了計算校驗和,我需要讀取所有數據。 但是,對於這兩個庫,我無法從存檔中提取任何內容,我只能填充類屬性,希望所有內容都正確加載,然后我可以計算校驗和。 我想在加載類屬性之前計算校驗和。 是否可以?

我不知道專門執行此操作的序列化。

必要時,有時會序列化一個對象,然后該字節流及其散列是另一個也被序列化的中間對象中的字段。 這個最終的字節流就是傳輸的內容。

在接收時,字節流被反序列化,重新生成中間對象。 計算其字節流字段的散列並將其與其散列字段進行比較。 如果一切正常,那么字節流字段可以安全地反序列化以重新生成原始對象。

這有點低效 - 有兩個對象要序列化。 然而,中間對象大多只是一個字節流,這通常很容易序列化(特別是對於像 GPB 這樣的二進制序列化器)。

這也經常是不必要的。 文件系統、TCP 等已經內置了大量的錯誤檢查和糾正。 如果您的傳輸/存儲介質已經內置了大量的數據完整性檢查,那么補充它可能是過度的。 您提到了文件存儲 - 使用像 ZFS 這樣的文件系統將是確保數據完整性良好(加上其他好處的負載)的極好方法,從而減少您自己檢查的需要。 無論您做什么,ZFS 都會對存儲的數據應用糾錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM