sh256sum、xxd、base64联合计算文件的hash
生活随笔
收集整理的這篇文章主要介紹了
sh256sum、xxd、base64联合计算文件的hash
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
計算文件hash值并進行base64編碼
# 計算文件的sha256哈西值 $ sha256sum filename f3b6d97538bf435399529405f5b5e88a81911d0439935ab82dd8c4c61df3d0df filename $ sha256sum filename | base64 ZjNiNmQ5NzUzOGJmNDM1Mzk5NTI5NDA1ZjViNWU4OGE4MTkxMWQwNDM5OTM1YWI4MmRkOGM0YzYx //根據(base64)RFC822規定,每76個字符加一個換行符 ZGYzZDBkZiAgY2dvMDEuYwo= # 根據base64把每三個8Bit的字符轉換為四個6Bit的字符,數據不足3個字節的用0補足(base64后一般在后面顯示為"=",所以最多可能有2個等號) # base64計算后的字節數計算方法如下: # base64后字符 = (原始字符長度 + 2) / 3 * 4 # 根據上面的計算公式,sha256sum filename | base64的計算結果應該是44字節,但是實際計算結果100字節遠遠大于44字節,問題出在sha256sum上 # 可以看出sha256sum filename 輸出的結果為16進制的數據,我們需要二進制的方式進行輸出 $ sha256sum filename | xxd -b 00000000: 01100110 00110011 01100010 00110110 01100100 00111001 f3b6d9 00000006: 00110111 00110101 00110011 00111000 01100010 01100110 7538bf 0000000c: 00110100 00110011 00110101 00110011 00111001 00111001 435399 00000012: 00110101 00110010 00111001 00110100 00110000 00110101 529405 00000018: 01100110 00110101 01100010 00110101 01100101 00111000 f5b5e8 0000001e: 00111000 01100001 00111000 00110001 00111001 00110001 8a8191 00000024: 00110001 01100100 00110000 00110100 00110011 00111001 1d0439 0000002a: 00111001 00110011 00110101 01100001 01100010 00111000 935ab8 00000030: 00110010 01100100 01100100 00111000 01100011 00110100 2dd8c4 00000036: 01100011 00110110 00110001 01100100 01100110 00110011 c61df3 0000003c: 01100100 00110000 01100100 01100110 00100000 00100000 d0df 00000042: 01100011 01100111 01101111 00110000 00110001 00101110 cgo01. 00000048: 01100011 00001010 c. # xxd 命令是二進制查看命令, -b參數表示以2進制字符串形式輸出 # 這樣就得到了二進制的輸出,然后我們再計算base64的值 $ sha256sum filename | xxd -b | base64 MDAwMDAwMDA6IDAxMTAwMTEwIDAwMTEwMDExIDAxMTAwMDEwIDAwMTEwMTEwIDAxMTAwMTAwIDAw MTExMDAxICBmM2I2ZDkKMDAwMDAwMDY6IDAwMTEwMTExIDAwMTEwMTAxIDAwMTEwMDExIDAwMTEx MDAwIDAxMTAwMDEwIDAxMTAwMTEwICA3NTM4YmYKMDAwMDAwMGM6IDAwMTEwMTAwIDAwMTEwMDEx IDAwMTEwMTAxIDAwMTEwMDExIDAwMTExMDAxIDAwMTExMDAxICA0MzUzOTkKMDAwMDAwMTI6IDAw MTEwMTAxIDAwMTEwMDEwIDAwMTExMDAxIDAwMTEwMTAwIDAwMTEwMDAwIDAwMTEwMTAxICA1Mjk0 MDUKMDAwMDAwMTg6IDAxMTAwMTEwIDAwMTEwMTAxIDAxMTAwMDEwIDAwMTEwMTAxIDAxMTAwMTAx IDAwMTExMDAwICBmNWI1ZTgKMDAwMDAwMWU6IDAwMTExMDAwIDAxMTAwMDAxIDAwMTExMDAwIDAw MTEwMDAxIDAwMTExMDAxIDAwMTEwMDAxICA4YTgxOTEKMDAwMDAwMjQ6IDAwMTEwMDAxIDAxMTAw MTAwIDAwMTEwMDAwIDAwMTEwMTAwIDAwMTEwMDExIDAwMTExMDAxICAxZDA0MzkKMDAwMDAwMmE6 IDAwMTExMDAxIDAwMTEwMDExIDAwMTEwMTAxIDAxMTAwMDAxIDAxMTAwMDEwIDAwMTExMDAwICA5 MzVhYjgKMDAwMDAwMzA6IDAwMTEwMDEwIDAxMTAwMTAwIDAxMTAwMTAwIDAwMTExMDAwIDAxMTAw MDExIDAwMTEwMTAwICAyZGQ4YzQKMDAwMDAwMzY6IDAxMTAwMDExIDAwMTEwMTEwIDAwMTEwMDAx IDAxMTAwMTAwIDAxMTAwMTEwIDAwMTEwMDExICBjNjFkZjMKMDAwMDAwM2M6IDAxMTAwMTAwIDAw MTEwMDAwIDAxMTAwMTAwIDAxMTAwMTEwIDAwMTAwMDAwIDAwMTAwMDAwICBkMGRmICAKMDAwMDAw NDI6IDAxMTAwMDExIDAxMTAwMTExIDAxMTAxMTExIDAwMTEwMDAwIDAwMTEwMDAxIDAwMTAxMTEw ICBjZ28wMS4KMDAwMDAwNDg6IDAxMTAwMDExIDAwMDAxMDEwICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjLgo= # 可以看出輸出的長度也不是44,不符合預期,查看xxd命令得知還有其他參數: # -ps 表示以postscript的連續16進制轉儲輸出,也叫做純16進制轉儲 # -r 表示逆向轉換,將16進制字符串表示轉換為實際的字符 $ sha256sum filename | xxd -r -ps ���u8�CS�R���芁�9�Z�-������ $ sha256sum filename | xxd -r -ps | base64 87bZdTi/Q1OZUpQF9bXoioGRHQQ5k1q4LdjExh3z0N8B # 現在得到的結果正是我們想要的正確結果,長度為44 # 驗證命令如下: $ echo "87bZdTi/Q1OZUpQF9bXoioGRHQQ5k1q4LdjExh3z0N8B" | base64 -d ���u8�CS�R���芁�9�Z�-������ 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的sh256sum、xxd、base64联合计算文件的hash的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件压缩的一种实现
- 下一篇: go.sum中特殊hash如何计算