前面在讲要查询 commit 时要看他的 SHA-1 码,这个 SHA-1 到底是什麽!今天就来补充不知道也不会死的冷知识吧!!
SHA-1 的全名是 Secure Hash Algorithm 1,中文翻译就是「安全杂凑演算法 1」,他是一种密码杂凑演算法,透过演算产生 40 个十六进位的数字,下图为 SHA-1 压缩演算法中的一个回圈。
A, B, C, D和E是这个state中的32位元文字;F是会变化的非线性函式;<<<n代表bit向左循环移动n个位置。n因操作而异。田代表modulo 232之下的加法,Kt是一个常数。
SHA-1 的特性就是输入一样的值,就会产生一样的输出值,所以 git 都是使用这个演算法来产生编码的。
而 git 是使用「内容」来进行版本控制的,所以 SHA-1 看的并不是档案名称,而是他的内容。
那这个编码会不会有重复的问题?
上述有说过,SHA-1 是根据输入内容来决定,当输入的内容一样时就会产生一样的输出值,所以当 SHA-1 一样时,代表的是内容是一样的。
那如果,真的是两个内容不一样的档案却产生相同的 SHA-1 呢?这个情况称之为碰撞(collision),但这个情况发生的机率真的很小很小很小...
但又有另一个情况发生了!就是 Google 在 2017 年成功破解 SHA-1 码,就有很多人担心十分依赖 SHA-1 的 git 会不会因此被骇入,但 git 创始人 Linus Torvalds 回覆说「git 除了使用 hash 产生 SHA-1 外,还会纪录数据长度等资讯,因此破解上还是有一定难度」,而一样是使用 git 进行控管的 GitHub 则是表示「将增加 SHA-1 加密碰撞的自动侦测和预防的功能,避免所有代管专案发生档案杂凑值重复的情况。」以及「日後所有Github上任何SHA-1运算,都会进行检测,只要发现会产生碰撞,就会自动中止,来防止攻击者使用GitHub做为碰撞攻击的平台。」
以上就是关於 SHA-1 的一些小故事,可以更加理解 git 存取内容的方式,关於更多 git 的内部原理可以参考这篇文章。
终於到最後一天了,可喜可贺可喜可贺!其实我也知道在这30天的期间内还有很多没能讲到的东西,既然都到最...
在部署 Kolla-Ansible 时,虽然能够同时部署 Ceph Cluster,但是在一些情况下...
今天要介绍的 Tip 是有关於 pipe 的 pure 与 impure,当没有任何额外的设定下,自...
既然已经透过 Serial API 取得 Port 存取权限了,再来我们就要来接收并解析资料了。 建...
codepen ...