Git SHA-1 雜湊值
在Git應用中,長度為40的數字和字元組成的字串司空見慣。
看如下程式碼例項:
[Shell] 純文字檢視 複製程式碼$ git log --pretty=oneline
程式碼執行效果截圖如下:
前面長度為40的字串就是sha-1值。
sha-1是一種密碼學的雜湊演算法,此演算法的特點是,如果被加密的內容相同,得出的sha-1值也是相同,如果被加密的值不同,那麼得到的sha-1也絕對不會相同,於是可以利用sha-1值唯一標識指定內容。
多數時候,我們看到的sha-1值並不是40位。
程式碼例項如下:
[Shell] 純文字檢視 複製程式碼$ git log --oneline
程式碼執行效果截圖如下:
有限的幾位字元完全可以唯一標識指定內容,沒有必要完整給出,如果上述例子中7位不夠,系統會自動增加。
一.是否可能出現重複現象:
兩個不同內容計算出的sha-1值相同,這種現象術語稱之為碰撞。
如何計算碰撞的概率本人確實不會,但是可以肯定的是,概率非常低,可以忽略不計。
2017年穀歌公司曾經成功進行了碰撞實驗,但是由於使用的是PDF檔案,而不是文字檔案,不能說明全部問題。
二.sha-1值計算方式:
計算方式這裡只是簡單介紹一下,更為全面詳實的內容,感興趣的可以自行網上搜尋。
在Git中,物件型別的不同,sha-1值的計算方式也有所不同,以Blob物件為例子,計算公式如下:
(1)."blob"字串。
(2).一個空格。
(3).Blob物件內容的長度。
(4).Null(空位元組)。
(5).Blob物件內容。
如果是commit物件,則將"blob"更換為"commit",以此類推。
使用Ruby程式碼計算方式如下:
# 引入SHA-1庫
[Ruby] 純文字檢視 複製程式碼require "digest/sha1"
# 要計算的內容
[Ruby] 純文字檢視 複製程式碼content = "螞蟻部落"
# 上面1-5公式的程式碼形式。
# blob #{content.length}\0構成了檔案頭,然後與內容#{content}拼接起來形成新內容。
[Ruby] 純文字檢視 複製程式碼input = "blob #{content.length}\0#{content}"
#計算拼接後的新內容的 SHA-1 校驗和。
[Ruby] 純文字檢視 複製程式碼puts Digest::SHA1.hexdigest(input)
僅以計算Blob物件的sha-1為例子做一下演示,知道大致怎麼回事即可,不必深究。
相關文章
- js 雜湊雜湊值的模組JS
- Git檢視指定檔案的sha-1值Git
- Microsoft 根證書計劃棄用 SHA-1 雜湊演算法ROS演算法
- 雜湊表(雜湊表)詳解
- 雜湊
- 使用execAll 實現getParam():直接拿到雜湊值
- C++基本型別雜湊值學習C++型別
- 雜湊表(雜湊表)原理詳解
- 【尋跡#3】 雜湊與雜湊表
- 一文搞懂單向雜湊加密:MD5、SHA-1、SHA-2、SHA-3加密
- Hasher for Mac(雜湊值生成器)v1.4Mac
- 查詢(3)--雜湊表(雜湊查詢)
- 樹雜湊
- 雜湊碰撞
- 字串雜湊字串
- 雜湊表
- 密碼學大事件!研究人員公佈第一例 SHA-1 雜湊碰撞例項密碼學事件
- HASH雜湊值競猜遊戲開發原始碼丨原始碼示例丨HASH雜湊遊戲程式設計遊戲開發原始碼程式設計
- 雜湊函式函式
- 字串雜湊表字串
- redis之雜湊Redis
- 雜湊連線
- 雜湊衝突
- 6.7雜湊表
- 異或雜湊
- 安全的雜湊
- 實現鍵值對儲存(五):雜湊表實現
- 幾道和雜湊(雜湊)表有關的面試題面試題
- 雜湊遊戲之雜湊盒子的趨勢未來可期遊戲
- 雜湊技術【雜湊表】查詢演算法 PHP 版演算法PHP
- 深入理解雜湊表(JAVA和Redis雜湊表實現)JavaRedis
- 淺析Java中的雜湊值HashCode的作用及用法Java
- linux命令列印字串md5雜湊後的值Linux命令列字串
- 雜湊競猜遊戲遊戲
- Redis命令——雜湊(Hash)Redis
- 雜湊表應用
- 雜湊表的原理
- 實現雜湊表