SHA-256大小写敏感吗?

21

我正在运行一个服务,它在应用程序的两个方面使用SHA-256 - 一个是服务端PHP实现,另一个是客户端iOS实现。在两个方面都使用该算法的结果是相同的字母数字字符串,唯一不同的是iOS上的所有字母都是大写的,而PHP上则为小写。它们是相同的字母数字字符串这一事实让我相信SHA-256是大小写不敏感的,但我找不到任何支持我的假设的文档。有人能给我展示一些文件来证实这一点吗?


1
可能是SHA256的输出格式是什么?的重复问题。 - user557846
4个回答

32
如果您正在参考十六进制字符串输出,那么是的,它不区分大小写。它是二进制数据的文本表示形式。

http://en.wikipedia.org/wiki/Hexadecimal

算法本身绝对区分大小写。

这是一个相当古老的帖子..然而,我不确定这是一个清晰的解释。任何文本都是二进制数据表示; 然而,不同的寄存器(小写或大写)在底层具有不同的二进制代码。T和t是不同的位..那么SHA256区分大小写吗?那么为什么输出字符串是大小写不敏感的?你在“算法本身绝对是区分大小写的”中是什么意思? - Giorgi Tsiklauri
1
@GiorgiTsiklauri SHA256 只能处理二进制数据,并且它实际上输出的也是二进制数据。稍微解读一下问题,很明显提问者看到的是二进制哈希值的十六进制表示。是的,SHA256 绝对是大小写敏感的。因为它的输出是二进制的。但是如果你将二进制转换成十六进制,那么十六进制就不区分大小写了。 - Brad

6

没有一个合适的加密哈希函数是不区分大小写的,因为这样会更容易产生碰撞。输出结果则是另一回事。它基本上是一个大数字(所以大小写不适用),但为了方便起见,它以十六进制表示,即使用字母a到f作为附加数字。十六进制表示法确实不区分大小写,或者至少常见的是有大小写变体的。这并不重要,也不会改变所表示的数字。


4
如果输入的二进制表示在两侧相同,则哈希值的二进制表示将相同。十六进制不区分大小写。

1
所有的SHA系列都是二进制算法,它们不了解大小写,因此它们不能是大小写不敏感的。
您可以在单台计算机上测试这一点,使用一个具有不同大小写的字符串的两个输出,您会发现它们提供不同的结果。
在您的情况下,如果一切正常,可能iOS在手机上显示大写字符串,但在内部传递给您普通(小写)字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接