為了保證分發的資料包的一緻性,常常需要增加資料包校驗碼,這樣可以減少因為傳遞過程中造成的資料包不能使用問題,比如jar包的__invalid distance code__問題。在開始讨論資料包校驗碼生成方法前,先了解一下基本概念。
核心技術
哈希
哈希是一種不可逆的映射,可以将資料經過雜湊演算法計算得到一個哈希值,而無法再将該哈希值反映射得到原始的資料。一般來說,不同的資料得到的哈希值是不同的,但也有極少的可能會出現碰撞,這極小的機率在這裡不予考慮
在網絡資料完整性校驗中使用的雜湊演算法通常包括:MD5, SHA。
資料完整性校驗
資料完整性校驗一般使用雜湊演算法對資料進行哈希得到資料包的一個哈希值,釋出到網上。使用者下載下傳資料包後,需要再次對結果的資料包計算哈希值,如果計算的結果與網上公布的一緻,即代表資料包完整。
生成哈希值方法
shell指令
- MacOS
md5 source_file.tar
shasum source_file.tar
- CentOS / Ubuntu
md5sum source_file.tar
sha1sum source_file.tar
maven打包
執行install指令時可以選擇自動生成md5與sha1檔案(在本地maven庫裡,例如~/.m2/repository)
mvn install -DcreateChecksum=true
或在pom檔案中增加插件
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<createChecksum>true</createChecksum>
</configuration>
</plugin>
ant打包
采用Checksum工具生成md5與sha1碼,需要在build.xml中增加task:
<checksum file="source_file.tar" algorithm="SHA-1" fileext=".sha1" forceOverwrite="yes"/>
<checksum file="source_file.tar" algorithm="MD5" fileext=".md5" forceOverwrite="yes"/>
其中fileext代表生成哈希碼檔案的字尾