Go Crypto/ECDSA验证即使数据不同,给予真实



我有一些以映射形式的数据,我将其转换为[] byt并签名,并且在验证时,即使使用用于验证和签名的数据是不同的值。这是我所做的 -

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)
}

它是正确的。我尝试更改数据,看来JSON_DATA和JSON_DATA_2有前32个字节常见,然后验证返回true。我可以发送到ecdsa.verify((的字节阵列的长度上有一定限制吗?如果是这样,我该如何将其用于较大的数据?

Golang ecdsa.Signecdsa.Verify功能有望采用加密哈希功能的输出,而不是消息本身。因此,您是正确的,在这种情况下,仅检查了前32个字节。

首先使用加密哈希函数(例如SHA-2

(解决问题。

相关内容

最新更新