标签: sha1

git中的哈希冲突

如果我在使用git时遇到哈希冲突会发生什么?

例如,我设法提交两个具有相同sha1校验和的文件,git会注意到它还是损坏了其中一个文件?

可以改进git以适应它,或者我是否必须更改为新的哈希算法?

(请不要通过讨论这个问题来转移这个问题 - 谢谢)

git hash sha1 hash-collision

162
推荐指数
6
解决办法
4万
查看次数


在MySQL中存储SHA1哈希值

当我想在SHA数据库中存储SHA1哈希的结果时,我遇到了一个简单的问题:

VARCHAR字段应该在多长时间内存储哈希的结果?

mysql hash database-design sha1

155
推荐指数
4
解决办法
11万
查看次数

Java String到SHA1

我正在尝试用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什么?或者我这样做完全错了?

java string sha1

148
推荐指数
9
解决办法
24万
查看次数

SHA-1对密码存储是否安全?

结论: SHA-1和preimage攻击一样安全,但它很容易计算,这意味着更容易安装暴力攻击或字典攻击.(对于像SHA-256这样的后继者也是如此.)根据具体情况,设计成计算成本高的哈希函数(例如bcrypt)可能是更好的选择.


有些人会像"SHA-1被打破"那样发表评论,所以我试图理解究竟是什么意思.假设我有一个SHA-1密码哈希的数据库,一个攻击者使用最先进的SHA-1破解算法和一个拥有100,000台机器的僵尸网络可以访问它.(控制超过10万台家用计算机意味着他们每秒可以完成大约10 ^ 15次操作.)他们需要多长时间

  1. 找出任何一个用户的密码?
  2. 找出给定用户的密码?
  3. 找出所有用户的密码?
  4. 找到一种以用户身份登录的方法?
  5. 找到以特定用户身份登录的方法?

如果密码被腌制,它会如何改变?腌制的方法(前缀,后缀,两者,还是像xor-ing这样复杂的东西)是否重要?

这是我目前的理解,经过一些谷歌搜索.如果我误解了某些内容,请在答案中更正.

  • 如果没有盐,彩虹攻击会立即找到所有密码(超长密码除外).
  • 如果有足够长的随机盐,找出密码的最有效方法是暴力破解或字典攻击.碰撞和preimage攻击都没有找到实际密码的任何帮助,因此对SHA-1的加密攻击在这里没有帮助.使用什么算法甚至不重要 - 人们甚至可以使用MD5或MD4,密码也同样安全(因为计算SHA-1哈希的速度较慢).
  • 为了评估"同样安全"的安全性,我们假设单个sha1运行需要1000次操作,密码包含大写,小写和数字(即60个字符).这意味着攻击者每天可以测试10个15*60*60*24/1000~ = 10 17个潜在密码.对于暴力攻击,这意味着在3小时内测试最多9个字符的所有密码,一周最多10个字符,一年最多11个字符.(每增加一个字符需要花费60倍.)字典攻击速度要快得多(即使是一台计算机的攻击者也可以在几小时内完成它),但只能找到弱密码.
  • 要以用户身份登录,攻击者无需找到确切的密码; 它足以找到导致相同哈希的字符串.这被称为第一次原像攻击.据我所知,没有针对SHA-1的preimage攻击.(A暴力破解攻击需要2点160的操作,这意味着我们的理论,攻击者需要10 30年,把它关闭.的理论可能性的限制是大约2个60操作,在该攻击将需要几年的时间.)有原像攻击对抗缩减版本的SHA-1,效果可以忽略不计(对于使用44步而不是80步减少的SHA-1,攻击时间从2 160次操作减少到2 157次).有针对SHA-1的碰撞攻击,这在理论上是可能的(我发现最好的时间从2 80减少到2 52),但是这些对密码哈希没用,即使没有腌制.

简而言之,使用SHA-1存储密码似乎非常安全.我错过了什么?

更新:马塞洛指出了一篇文章,其中提到了2 106次操作的第二次原像攻击.(编辑:正如托马斯解释的那样,这种攻击是一种假设的结构,不适用于现实场景.)但我仍然没有看到这对于使用SHA-1作为关键的派生函数是多么危险.通常有充分的理由认为碰撞攻击或第二次原始图像攻击最终会变成第一次原始图像攻击吗?

hash cryptography sha1

146
推荐指数
4
解决办法
6万
查看次数

如何在没有Git的情况下将Git SHA1分配给文件?

据我所知,当Git为文件分配SHA1哈希时,该SHA1对于文件的内容是唯一的.

因此,如果文件从一个存储库移动到另一个存储库,则该文件的SHA1保持不变,因为其内容未更改.

Git如何计算SHA1摘要?它是在完整的未压缩文件内容上执行的吗?

我想模仿在Git之外分配SHA1.

git sha1

138
推荐指数
3
解决办法
2万
查看次数

SHA1 vs md5 vs SHA256:用于PHP登录?

我正在进行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)

php md5 sha1 login sha256

132
推荐指数
4
解决办法
15万
查看次数

如何生成随机SHA1哈希以在node.js中用作ID?

我正在使用此行为node.js生成sha1 id:

crypto.createHash('sha1').digest('hex');
Run Code Online (Sandbox Code Playgroud)

问题是它每次都返回相同的id.

是否可以让它每次生成一个随机ID,以便我可以将它用作数据库文档ID?

javascript random sha1 entropy node.js

123
推荐指数
3
解决办法
7万
查看次数

git如何计算文件哈希值?

存储在树对象git ls-tree中的SHA1哈希值(由返回的sha1sum)与文件内容的SHA1哈希值不匹配(由返回)

$ git cat-file blob 4716ca912495c805b94a88ef6dc3fb4aff46bf3c | sha1sum
de20247992af0f949ae8df4fa9a37e4a03d7063e  -
Run Code Online (Sandbox Code Playgroud)

git如何计算文件哈希值?它是否在计算哈希值之前压缩内容?

git hash checksum sha1 git-hash

120
推荐指数
3
解决办法
4万
查看次数

JavaScript的简单(非安全)哈希函数?

可能重复:
在Javascript/jQuery中从字符串生成哈希

任何人都可以建议一个简单的(即数十行代码,而不是数百行)散列函数(与浏览器兼容)JavaScript?理想情况下,我想要一些东西,当传递一个字符串作为输入时,产生类似于32字符十六进制字符串的东西,它是MD5,SHA1等的典型输出.它不一定是加密安全的,只是合理地抵抗冲突.(我的初始用例是URL,但我可能希望将来在其他字符串上使用它.)

javascript hash md5 sha1

116
推荐指数
4
解决办法
15万
查看次数