如果我在使用git时遇到哈希冲突会发生什么?
例如,我设法提交两个具有相同sha1校验和的文件,git会注意到它还是损坏了其中一个文件?
可以改进git以适应它,或者我是否必须更改为新的哈希算法?
(请不要通过讨论这个问题来转移这个问题 - 谢谢)
当我想在SHA数据库中存储SHA1哈希的结果时,我遇到了一个简单的问题:
VARCHAR字段应该在多长时间内存储哈希的结果?
我正在尝试用Java创建一个简单的String to SHA1转换器,这就是我所拥有的......
public static String toSHA1(byte[] convertme) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA-1");
}
catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}
return new String(md.digest(convertme));
}
Run Code Online (Sandbox Code Playgroud)
当我通过它时toSHA1("password".getBytes())
,我[?a?????%l?3~??.
知道它可能是一个简单的编码修复,如UTF-8,但有人可以告诉我应该做什么来获得我想要的东西是5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
什么?或者我这样做完全错了?
结论: SHA-1和preimage攻击一样安全,但它很容易计算,这意味着更容易安装暴力攻击或字典攻击.(对于像SHA-256这样的后继者也是如此.)根据具体情况,设计成计算成本高的哈希函数(例如bcrypt)可能是更好的选择.
有些人会像"SHA-1被打破"那样发表评论,所以我试图理解究竟是什么意思.假设我有一个SHA-1密码哈希的数据库,一个攻击者使用最先进的SHA-1破解算法和一个拥有100,000台机器的僵尸网络可以访问它.(控制超过10万台家用计算机意味着他们每秒可以完成大约10 ^ 15次操作.)他们需要多长时间
如果密码被腌制,它会如何改变?腌制的方法(前缀,后缀,两者,还是像xor-ing这样复杂的东西)是否重要?
这是我目前的理解,经过一些谷歌搜索.如果我误解了某些内容,请在答案中更正.
简而言之,使用SHA-1存储密码似乎非常安全.我错过了什么?
更新:马塞洛指出了一篇文章,其中提到了2 106次操作中的第二次原像攻击.(编辑:正如托马斯解释的那样,这种攻击是一种假设的结构,不适用于现实场景.)但我仍然没有看到这对于使用SHA-1作为关键的派生函数是多么危险.通常有充分的理由认为碰撞攻击或第二次原始图像攻击最终会变成第一次原始图像攻击吗?
据我所知,当Git为文件分配SHA1哈希时,该SHA1对于文件的内容是唯一的.
因此,如果文件从一个存储库移动到另一个存储库,则该文件的SHA1保持不变,因为其内容未更改.
Git如何计算SHA1摘要?它是在完整的未压缩文件内容上执行的吗?
我想模仿在Git之外分配SHA1.
我正在进行php登录,我正在尝试决定是否使用SHA1或Md5,或者我在另一篇stackoverflow文章中读到的SHA256.他们中的任何一个比其他人更安全吗?对于SHA1/256,我还使用盐吗?
另外,这是一种将密码存储为mysql中的哈希的安全方法吗?
function createSalt()
{
$string = md5(uniqid(rand(), true));
return substr($string, 0, 3);
}
$salt = createSalt();
$hash = sha1($salt . $hash);
Run Code Online (Sandbox Code Playgroud) 我正在使用此行为node.js生成sha1 id:
crypto.createHash('sha1').digest('hex');
Run Code Online (Sandbox Code Playgroud)
问题是它每次都返回相同的id.
是否可以让它每次生成一个随机ID,以便我可以将它用作数据库文档ID?
存储在树对象git ls-tree
中的SHA1哈希值(由返回的sha1sum
)与文件内容的SHA1哈希值不匹配(由返回)
$ git cat-file blob 4716ca912495c805b94a88ef6dc3fb4aff46bf3c | sha1sum
de20247992af0f949ae8df4fa9a37e4a03d7063e -
Run Code Online (Sandbox Code Playgroud)
git如何计算文件哈希值?它是否在计算哈希值之前压缩内容?
任何人都可以建议一个简单的(即数十行代码,而不是数百行)散列函数(与浏览器兼容)JavaScript?理想情况下,我想要一些东西,当传递一个字符串作为输入时,产生类似于32字符十六进制字符串的东西,它是MD5,SHA1等的典型输出.它不一定是加密安全的,只是合理地抵抗冲突.(我的初始用例是URL,但我可能希望将来在其他字符串上使用它.)