

チェックサムについてご質問です。

バイナリファイル(最大2048kbyte)のチェックサムを作成します。  
チェックサムは1byte毎にマイナスしていき、その合計値とする予定です。  
下記url参照  
[チェックサムについて](https://ja.stackoverflow.com/questions/30991/%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%B5%E3%83%A0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

その際、チェックサムを格納する所は4byteです。  
そこで質問なのですが、4byteに収まりきれないはどのようにすればよろしいでしょうか。

また、一般的(何が一般的なのかわかりませんが・・・)なチェックサムと、決められたbyte数に保存するやり方をご教授下さると幸いです。

宜しくお願い致します。


CC BY-SA 3.0
2016-12-26T16:30:01.390
31415
2016-12-27T02:22:15.750
2017-04-13T12:52:39.113
-1
19213
question
アルゴリズム
チェックサムの格納byte数


0-255の値が最大2048K個でしたら、符号付き32bitをアンダーフローすることは有り得ません。机上で証明できます。

オーバーフロー/アンダフローするケースではチェックサムの下位nビットのみを比較するのが一般的かと思います。


CC BY-SA 3.0
2016-12-26T17:22:45.880
31417
2016-12-27T02:22:15.750
2016-12-27T02:22:15.750
3475
3475
31415
answer


この手のチェックコードは用途/目的/許容できる計算量次第というか。チェックコードとして一般的なのは

・パリティ  
・チェックサム  
\- 計算が簡単で高速  
\- 伝送誤り検出能力が低い  
\- 改ざん検出には役立たない  
（チェックコードを利用する側が８ビットマイコン等で計算量が少ないことが最優先される場合にほぼ限定）

・ CRC (巡回冗長検査)  
\- 計算がちょっと難しい  
\- 伝送誤り検出能力が高い  
\- 改ざん検出は無理  
（性能と計算量のバランスが取れていて実用性が高い。 rar zip 等でも採用されている）

・単方向ハッシュ関数 (SHA256 等)  
\- 計算量が多く時間がかかる  
\- 伝送誤り検出が高い (伝送誤り検出に使うにはコスト高すぎ)  
\- 改ざん検出ができる  
（計算量が多くて１チップマイコン等で使うのは困難だがチェック能力は最高）

2MiB の元データに対して 4byte (32bit) のチェックコードを選定せよということなら  
CRC32 がバランス取れてて良いので、オイラならこれを採用するでしょう。

[CRC32とMD5の使い分け](https://ja.stackoverflow.com/questions/12289/crc32%E3%81%A8md5%E3%81%AE%E4%BD%BF%E3%81%84%E5%88%86%E3%81%91)


CC BY-SA 3.0
2016-12-27T00:41:24.077
31445
2016-12-27T00:41:24.077
2017-04-13T12:52:39.113
-1
8589
31415
answer