1. git 的版本是從文件內容計算出的哈希值, 會重復么git 是否通過比較已產生過的版本號列表來防止碰撞
git的版本應該是你說的從文件的內容計算出的哈希值,但還有提交作者的信息,及該次提交的時間戳
重復的情況是存在的,從數學的角度考慮,可能性是2的63次方分之一。
使用的是 SHA-1 哈希演算法,40位的長度
放置碰撞應該會考慮到,可以想像下比較簡單,如果重復等1秒後提交,因為是有提交的時間戳的
當然還有其他情況
但一般項目可以不用擔心,畢竟重復也只是理論層面的
可以想像下Linux也是通過git進行源代碼管理的
2. 什麼是哈希值 哈希值怎麼用
釋義:通過一定的哈希演算法(典型的有MD5,SHA-1等),將一段較長的數據映射為較短小的數據,這段小數據就是大數據的哈希值。他有這樣一個特點,他是唯一的,一旦大數據發生了變化,哪怕是一個微小的變化,他的哈希值也會發生變化。
另外一方面,既然是DNA,那就保證了沒有兩個數據的哈希值是完全相同的。
哈希值的作用:哈希值,即HASH值,是通過對文件內容進行加密運算得到的一組二進制值,主要用途是用於文件校驗或簽名。正是因為這樣的特點,它常常用來判斷兩個文件是否相同。
比如,從網路上下載某個文件,只要把這個文件原來的哈希值同下載後得到的文件的哈希值進行對比,如果相同,則表示兩個文件完全一致,下載過程沒有損壞文件。而如果不一致,則表明下載得到的文件跟原來的文件不同,文件在下載過程中受到了損壞。
(2)根據文件內容計算sha值擴展閱讀:
哈希值,是一種從任何一種數據中創建小的數字「指紋」的方法。哈希值把消息或數據壓縮成摘要,使得數據量變小,將數據的格式固定下來。該函數將數據打亂混合,重新創建一個叫做散列值(hash values,hash codes,hash sums,或hashes)的指紋。
散列值通常用一個短的隨機字母和數字組成的字元串來代表。好的哈希值在輸入域中很少出現散列沖突。在散列表和數據處理中,不抑制沖突來區別數據,會使得資料庫記錄更難找到。
典型的哈希值都有非常大的定義域,比如SHA-2最高接受(2-1)/8長度的位元組字元串。同時哈希值一定有著有限的值域,比如固定長度的比特串。在某些情況下,哈希值可以設計成具有相同大小的定義域和值域間的單射。哈希值必須具有不可逆性。
3. 如何計算文件的SHA1-digest值就是java程序中用來校驗防改的演算法得值,怎麼生成
剛剛好我自己也需要這個計算,看了一下,會不會是這樣:
先正常算出SHA1的值(普通是以16進制串表示),將這個16進制串在內存中以位元組流保存,然後Base64計算的結果不知道是不是就是Sha1-Digest的值。
經編程測試,確實如此。