我正在使用json生成一个json编码的python dict的HMAC、sha256散列。我们称之为hash1。这是我随JWT寄来的签名。然后我想在Go的另一个服务中验证这个签名。我正在使用映射中的数据(与python dict相同)、json编码和散列(hash2) 但是,hash1和hash2是不同的。 我了解到这是由于pythonjson在dict中的元素之间添加了空间,golangjson库没有添加任何空间。 我有办法解决这个问题吗?你知道吗
some_data = {'a':1, 'b':2}
json_str1 = json.dumps(some_data, sort_keys=True)
some_data := map[string]int{"a":1, "b":2}
json_str2 = json.Marshal(some_data)
编辑: 正如其中一个答案中所建议的,在json.dumps文件会解决问题的。不幸的是, 我不拥有python端代码,因此无法在那里进行更改。你知道吗
json.Marshal
不字符串化。它以字节为单位返回json编码。你知道吗如果需要字符串转换,可以使用以下命令。你知道吗
因为
json.dumps
在字段值之间添加了一个额外的空格,所以可以使用下面的方法向json字符串化文件添加一个额外的空格如果存在逗号为
","
的字符串值,则使用此分隔符可能会失败。你知道吗为了确保不给包含逗号的字符串添加任何空格,可以使用marshalIndent
Python输出
Go output
golang中的Json库有一个MarshalIndent函数来解决这个问题。你知道吗
我不能对Go说什么,但是当我在javascript中生成hash时,我也遇到了同样的问题。您需要使用一些分隔符,比如
json.dumps(data, separators=(',', ':')).encode('utf-8')
会有用的。你知道吗相关问题 更多 >
编程相关推荐