【发布时间】:2012-08-07 04:31:18
【问题描述】:
我在应用程序的两端运行使用 SHA-256 的服务 - 一个是服务器端 PHP 实现,另一个是客户端 iOS 实现。两边都使用算法的结果是相同的字母数字字符串,除了所有字母在 iOS 上大写而在 PHP 上小写的事实。它们是相同的字母数字字符串这一事实让我相信 SHA-256 不区分大小写,但我找不到任何支持我的假设的文档。有人可以给我看一些文件来确认吗?
【问题讨论】:
我在应用程序的两端运行使用 SHA-256 的服务 - 一个是服务器端 PHP 实现,另一个是客户端 iOS 实现。两边都使用算法的结果是相同的字母数字字符串,除了所有字母在 iOS 上大写而在 PHP 上小写的事实。它们是相同的字母数字字符串这一事实让我相信 SHA-256 不区分大小写,但我找不到任何支持我的假设的文档。有人可以给我看一些文件来确认吗?
【问题讨论】:
如果输入的二进制表示在两边相同,则哈希值的二进制表示将相同。十六进制不区分大小写。
【讨论】:
所有SHA 系列都是二进制算法,它们对大小写一无所知,因此它们不能不区分大小写。
您可以简单地在单台机器上使用一个字符串的 2 个输出(不同情况下)进行测试,您可以看到它们提供了不同的结果。
在您的情况下,我认为如果一切正常,iOS 可能会在手机中显示大写字符串,但在内部传递给您正常(小写)字符串
【讨论】:
否像样的加密散列函数不区分大小写,因为这样会更容易产生冲突。输出是另一回事。它基本上是一个大数字(因此大小写 不适用),但为方便起见,它以 16 为基数给出,即使用字母 a 到 f 作为附加数字。十六进制表示法确实不区分大小写,或者至少大写和小写变体都是常见的并且可以识别。没关系,也不会改变表示的数字。
【讨论】:
【讨论】: