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的值。
经编程测试,确实如此。