2017-06-22 8 views
1

Ich habe einige Daten in Form von map und ich konvertiere es in [] byt und signiere es und beim Verifizieren gibt es True value auch wenn Daten für verwendet werden Verifizieren und Signieren sind anders. Hier ist, was ich DIDgehe crypto/ecdsa Verifiziere das Geben auch wenn die Daten unterschiedlich sind

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

Es druckt wahr. Ich versuchte, die Daten zu ändern, und es scheint, dass wenn If json_data und json_data_2 erste 32 Bytes gemeinsam haben, dann Verify true zurückgibt. Gibt es ein Limit über die Länge des Byte-Arrays, das ich an ecdsa.Verify() senden kann? Wenn ja, wie kann ich es für größere Daten verwenden?

Antwort

2

Die Funktionen ecdsa.Sign und ecdsa.Verify von Golang werden voraussichtlich die Ausgabe einer kryptografischen Hash-Funktion anstelle der Nachricht selbst übernehmen. Sie haben also recht, dass in diesem Fall nur die ersten 32 Bytes untersucht werden.

Um das Problem zu lösen, Hash zuerst die Nachrichten mit einer kryptographischen Hash-Funktion wie SHA-2

Verwandte Themen