go crypto/ecdsa 即使数据不同也验证是否为真
go crypto/ecdsa Verify giving true even when the data is different
我有一些地图形式的数据,我正在将其转换为 []byt 并对其进行签名,在验证时,即使用于验证和签名的数据不同,它也会给出 True 值。
这是我所做的-
func main(){
n, _ := ioutil.ReadFile("privatekey")
private_key,_ := x509.ParseECPrivateKey(n)
public_key := private_key.PublicKey
data := map[string]string{
"data1": "somestring",
"data2": "12312",
"data3": "34fs4",
}
json_data, _ := json.Marshal(data)
data_2 := map[string]string{
"data1": "somestring",
"data2": "13312",
"data4": "fh34",
}
json_data_2,_ := json.Marshal(data_2)
r, s, _ := ecdsa.Sign(rand.Reader, private_key, json_data)
verifystatus := ecdsa.Verify(&public_key, json_data_2, r, s)
fmt.Println(verifystatus)
}
正在打印 true。我尝试更改数据,似乎 If json_data and json_data_2 have first 32 bytes common, then Verify returns true.
我可以发送到 ecdsa.Verify() 的字节数组的长度是否有一些限制?如果可以,我如何将它用于更大的数据?
golang ecdsa.Sign
和 ecdsa.Verify
函数应该采用加密哈希函数的输出,而不是消息本身。所以你是正确的,在这种情况下只检查前 32 个字节。
要解决此问题,请先使用 SHA-2 等加密哈希函数对消息进行哈希处理
我有一些地图形式的数据,我正在将其转换为 []byt 并对其进行签名,在验证时,即使用于验证和签名的数据不同,它也会给出 True 值。 这是我所做的-
func main(){
n, _ := ioutil.ReadFile("privatekey")
private_key,_ := x509.ParseECPrivateKey(n)
public_key := private_key.PublicKey
data := map[string]string{
"data1": "somestring",
"data2": "12312",
"data3": "34fs4",
}
json_data, _ := json.Marshal(data)
data_2 := map[string]string{
"data1": "somestring",
"data2": "13312",
"data4": "fh34",
}
json_data_2,_ := json.Marshal(data_2)
r, s, _ := ecdsa.Sign(rand.Reader, private_key, json_data)
verifystatus := ecdsa.Verify(&public_key, json_data_2, r, s)
fmt.Println(verifystatus)
}
正在打印 true。我尝试更改数据,似乎 If json_data and json_data_2 have first 32 bytes common, then Verify returns true. 我可以发送到 ecdsa.Verify() 的字节数组的长度是否有一些限制?如果可以,我如何将它用于更大的数据?
golang ecdsa.Sign
和 ecdsa.Verify
函数应该采用加密哈希函数的输出,而不是消息本身。所以你是正确的,在这种情况下只检查前 32 个字节。
要解决此问题,请先使用 SHA-2 等加密哈希函数对消息进行哈希处理