SHA512如何将长字符串变成短字符串

SHA512如何将长字符串变成短字符串

我想知道这个随机的很长的字符串

€£$€@]}$€{[$£}]£[€€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]h€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]h]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]hXC&Yi45wtgsb}]h€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]h€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpb€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]hkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]h€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]h€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]h€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]h€£$€@]}$€{[$£}]£[€]}€486745896€$€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]h@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubh€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]hj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]h€£$€€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]h@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]h€£$€@]}$€{[$£}]£[€]}€486745896€$@fdhhsgpbkjhYUVYUDTYhµµµ½789ty45thhrhYUFVYU7645646f8cgI JKHVruxty dw78fg f 9w64f dfvt87t&R%EFVyubhj<<e5w>G/p9\<\]}}]@}$]$€}{$€øøål5940hgsy/)T(&¤%}]€$ygrevae48g85XC&Yi45wtgsb}]

可以变成这个更短的字符串

bb90e8b58596c55070ee88b25ff01627ab0c227cd11d6f876af9e81a0cd12e9d8a1ebce3af5b0fd8098ac3946a590c55ebe890066db6403cb0ee324c6edf9f3d

这对我来说毫无意义。在 sha512 中两个字符串可以相同吗?等等,我们有字符串 1 和字符串 2,经过 sha512 哈希处理后,它们是否相同?

答案1

从根本上来说,哈希函数(例如 SHA512)采用可变长度的输入(可能比输出哈希更短、更长或长度相同,并且可能有也可能没有由哈希函数的工作方式决定的最大大小),并通过各种步骤使用该输入以可预测的方式改变哈希函数的内部状态(确定性的) 方式。另一方面,当没有更多输入时,将读取哈希函数的内部状态(或部分内部状态),可能以某种方式进一步处理,并将其作为哈希函数的输出传递。该输出称为输入数据的“哈希”。

哈希函数的设计目的是为了单向函数,也称为活板门功能;换句话说,它的设计使得根据输入很容易计算输出,但根据输出来计算输入是不可行的,即使在输入小于或等于输出的情况下也是如此。

输出哈希的长度是固定的,因为哈希函数的内部状态(以及对该状态进行后处理以输出的结果)的大小是已知的。选择精确的输出哈希长度以使其与哈希函数的内部结构相适应并提供所需的安全级别。某些哈希函数(如 MD5、RIPEMD160 或 SHA-1)具有固定大小的输出;其他哈希函数(如 SHA-2 或 SHA-3)可以根据使用哈希函数的系统的特定需求提供不同长度的输出。

哈希函数的两个不同输入有可能(甚至很可能)产生相同的输出哈希。对于哈希n对于输出位和两个随机输入,平均尝试 2 次后就会发生这种情况n/2组合,并且保证在您尝试 2 次后就会发生n+1 个不同的输入:在最坏(或最好)的情况下,2 个n输入将产生 2 个输入中的一个唯一输出n可能的输出,所以如果你再尝试一个输入,它必须与已经计算的输出之一匹配。这被称为哈希碰撞. 诸如 SHA 系列哈希之类的加密哈希函数的目的就是不产生此类冲突不可能的(不将哈希扩展到输入的整个大小,这在某种程度上否定了哈希的意义,这在数学上是不可能的),而是找到这样的输入非常困难。

哈希函数允许发现碰撞速度明显快于 2 n/2到 2 n 次操作(取决于攻击的具体方法;主要是查找所谓的原像生日攻击(如果你想了解更多)通常被认为对加密应用程序来说是无效的。这就是为什么2014 年左右,SHA-1 开始在网络浏览器中弃用 TLS 证书2012 年,一种理论上可行的攻击被发现,以及为什么老牌主力算法 MD5 对几乎所有加密应用来说都存在严重缺陷。

还需要记住的是SHA512 等哈希函数的输出不是十六进制字符串你在问题中表明了这一点。那就是一个代表实际哈希值,只是一个 64 字节(512 位)的二进制值。它也可以以二进制形式、Base64 编码形式或其他某种表示形式存储。

答案2

A哈希函数是一个应用程序,IE与大组(称为 A)中的任意数字相关联的东西,以及从另一组数字(称为 B)中取出的另一个数字。

在数学中,你可以有应用

  1. 当组 A 包含的元素多于组 B 时;

  2. 当两组包含相同数量的元素时;

  3. 当组 A 包含的元素比组 B 包含的元素少得多时。

哈希函数是情况 1,IEA组所含的元素比B组多得多。

A 族元素称为消息,B 组哈希

我认为你担心的是显而易见的推论,即许多不同的消息肯定会有相同的哈希值。许多人认为,如果哈希就像签名,那么两个或多个消息怎么会具有相同的签名呢?如果银行也发生同样的情况,那将是一场灾难。这种属性(具有相同的哈希值)称为碰撞

事实并非如此,因为哈希的另一个属性:它是计算性的不可行(= 极其困难),给定一条带有哈希值的消息,找到另一条具有相同哈希值的消息。

请注意,这并不是说:这根本就不可能,因为我们刚刚看到碰撞必须存在。上面的属性只是说它非常困难。有多难?事物以良好的哈希值排列(SHA2 肯定是一个很好的哈希值),以至于当今最强大的计算机使用最好的代码,比宇宙的年龄(=120 亿年)来发现碰撞。这似乎足够安全。

哈希还有另一个非常好的属性,它有助于解释为什么它们如此频繁地被使用。让我们以密码为例。密码存储在 pc 上,而不是公开文本中:pcs 存储密码的哈希,因此当我输入密码时,比较的不是两个密码,而是两个哈希。好的,现在让我们假设我的密码是:我的密码,现在小偷会尝试猜测,如下所示。取一个 10 个字母的序列(任何初始序列都可以,我们使用 Thisisasca)。然后他更改初始字母(在本例中为 T),直到找到一个字母,该字母的哈希值尽可能接近真实密码的(公开可用的)哈希值。

这样,攻击者可能希望一次一个字母地识别我的密码。请注意,这就是抢劫电影中的银行劫匪所做的:他们通过听取每次修改数字时发出的咔嗒声来识别密码。

嗯,哈希值无法做到这一点:哈希值的一个重要特性是,即使几乎相同的消息,实际上也有完全不同的哈希值。这样,你就不能像银行劫匪那样,一次猜一个字母。

用数学术语来说,这被称为大李雅普诺夫指数。

答案3

根据定义,无论原始数据的大小如何,SHA512 哈希的长度都是 512 位。有关更详细的解释,您可以阅读此维基百科文章这解释了什么是哈希函数。

由于 SHA512 不是完美哈希函数从数学上讲,两个不同的数据产生相同的 SHA512 哈希值是可能的,但可能性很小,正如另一个答案中所解释的那样问题在 Stack Overflow 上。

相关内容