18

我在应用程序的两侧运行使用 SHA-256 的服务 - 一个是服务器端 PHP 实现,另一个是客户端 iOS 实现。两边都使用算法的结果是相同的字母数字字符串,除了所有字母在 iOS 上大写而在 PHP 上小写的事实。它们是相同的字母数字字符串这一事实使我相信 SHA-256 不区分大小写,但我找不到任何支持我的假设的文档。有人可以给我看一些文件来确认这一点吗?

4

4 回答 4

30

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

http://en.wikipedia.org/wiki/十六进制

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

于 2012-08-09T21:18:09.893 回答
5

没有像样的加密哈希函数是不区分大小写的,因为那样会更容易产生冲突。输出是另一回事。它基本上是一个很大的数字(因此不适用大小写),但为了方便起见,它以 16 为基数给出,即使用字母 a 到 f 作为附加数字。十六进制表示法确实不区分大小写,或者至少大写和小写变体都是常见的并且可以识别。没关系,也不会改变所代表的数字。

于 2012-08-09T21:20:16.290 回答
4

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

于 2012-08-09T21:20:46.783 回答
1

所有SHA系列都是二进制算法,它们对大小写一无所知,因此它们不能不区分大小写。
您可以简单地在单台机器上使用一个字符串的 2 个输出和不同的情况进行测试,您可以看到它们提供了不同的结果。
在您的情况下,我认为如果一切正常,iOS 可能会在手机中显示大写字符串,但在内部传递给您正常(小写)字符串

于 2012-08-09T21:20:16.290 回答