当前位置: 首页 > 面试题库 >

Go和PHP中的SHA256提供不同的结果

邓昀
2023-03-14
问题内容

我正在尝试通过HTTP将SHA256哈希字符串发送到服务器,在服务器上我想通过执行SHA256哈希并验证两者的匹配来进行身份验证。出于测试目的,我使用相同的字符串,但是结果不匹配。可以使用base64_encode调用的默认编码方案吗?谢谢。

在PHP中,我正在做:

$sha = hash("sha256", $url, true);
$sha = base64_encode(urlencode($sha));

在Go中,我正在做

//convert string to byte slice
converted := []byte(to_hash)

//hash the byte slice and return the resulting string
hasher := sha256.New()
hasher.Write(converted)
return (base64.URLEncoding.EncodeToString(hasher.Sum(nil)))

问题答案:

过了一会儿我就知道了。我都将其标准化为十六进制编码。为此,我将代码更改如下:

PHP:

$sha = hash("sha256", $url, false); //false is default and returns hex
//$sha = base64_encode(urlencode($sha)); //removed

走:

//convert string to byte slice
converted := []byte(to_hash)

//hash the byte slice and return the resulting string
hasher := sha256.New()
hasher.Write(converted)
return (hex.EncodeToString(hasher.Sum(nil))) //changed to hex and removed URLEncoding


 类似资料:
  • 我试图通过HTTP向服务器发送一个SHA256哈希字符串,在那里我想通过执行SHA256哈希并验证两个匹配来进行身份验证。出于测试目的,我使用相同的字符串,但是结果不匹配。这可能是我的base64_encode调用的默认编码方案吗?谢谢 在PHP中,我正在做: 我在做什么

  • 问题内容: 当在PHP中对多维数组进行json_encode编码时,我只是通过命名一个数组而不是不命名它们来注意到一个不同的输出。例如: 给出多个json对象的单个数组 而只需为中间数组分配一个名称 创建一个带有多个json对象的单个json对象 为什么第一个选项不返回与第二个执行点相同的结果,并用“ 1”代替“ secondarray” 问题答案: 在JSON中,只有每个数组都有数字键,而对象则

  • 我正在加密字符串“AAAAAAAAAAAAAAAAAAAAAAAA”(一个16字节的UTF8字符串)使用AES 128 CBC与空白iv和密钥(16 0),并得到不同的结果 在PHP中: 第一位(粗体)与PHP相同,但PHP值有一个额外的“a=”,然后节点值有一个额外的“heuidae8z4dk0hu7p2z+1c” 我承认我对这里发生的事情很不确定--我错过了什么? 编辑...但不是那么不稳定,

  • 我正在尝试将Mongo作为容器组的一部分部署到Azure容器实例上。为此,我使用一个带有文件共享的存储帐户来持久化mongo数据。无法将卷装载到默认位置,因此我将其装载到其他位置,并使用--db path标记启动mongod。使用下面的CLI full命令,这一切都可以正常工作。 然而,当我想将所有这些命令转换为YAML配置文件时,它就不起作用了。Mongo崩溃,出现未知文件或目录错误。如果在没有

  • 我工作在AES256能够加密/解密之间的iOS和PHP使用不安全的渠道。 我见过许多类似的问题,围绕着密钥大小、模式(CBC或ECB)、随机iv的使用等。但是在这种情况下,我发现了以下奇怪的行为。 两种环境中的配置:-键:32字节(256位)-块大小:128位(标准)-iv:16字节(用于测试的静态)-模式:CBC 如果我加密一个16或32字节的文本(以匹配AES块大小),Swift和PHP中的结

  • 我在我的项目中使用SQL服务器,我试图在两个时间戳之间检索表中的条目。表的架构如下所示: 我需要获取在特定时间戳和当前时间戳之后添加的条目。为此,我尝试了下面提到的查询: 当在SQL客户机上直接执行这个查询时,我得到了所有预期的结果。但是当我从Java JDBC客户端执行相同的查询时,< code>resultset包含的条目的ADDED_TIME等于parameter1。 下面是客户端的Java