2016-08-08 44 views
1

Ich begann gerade mit Golang und schreibe ein sehr kleines Skript, alles funktioniert außer für sha224. Kann mir jemand erklären, warum ich den Fehler (in Bezug auf mein Skript) bekomme? Ich brauche diesen Fehler nicht behoben, ich will es verstehen, um zukünftige Fehler von meiner Seite zu verhindern.GetSha224 in crypto/sha256 undeclared Name

Der Fehler 49:12: nicht deklarierter Name: sha224 zeigt an, dass ich nicht etwas deklariert habe, aber ich kann es nicht finden, weil ich das gleiche für alle Hashing Algorythmen tat.

Ich bin kein Programmierer, noch ein Spezialist für Golang. Es geht um mein erstes Go-Programm.

package main 

import (
    "crypto/md5" 
    "crypto/sha1" 
    "crypto/sha256" 
    "crypto/sha512" 
    "encoding/hex" 
    "fmt" 
    "io/ioutil" 
    "net/http" 
) 

func main() { 
    url := "http://45.32.153.207/index2.php" 
    fmt.Printf("HTML code of %s ...\n", url) 
    resp, err := http.Get(url) 
    if err != nil { 
     panic(err) 
    } 
    defer resp.Body.Close() 
    html, err := ioutil.ReadAll(resp.Body) 
    if err != nil { 
     panic(err) 
    } 
    fmt.Printf("%s\n", html) 
    toHash := CToGoString(html[:]) 

    fmt.Printf("%s\n", GetMD5Hash(toHash)) 
    fmt.Printf("%s\n", GetSha1Hash(toHash)) 
    fmt.Printf("%s\n", GetSha224Hash(toHash)) 
    fmt.Printf("%s\n", GetSha256Hash(toHash)) 
    fmt.Printf("%s\n", GetSha512Hash(toHash)) 
} 

func GetMD5Hash(text string) string { 
    hasher := md5.New() 
    hasher.Write([]byte(text)) 
    return hex.EncodeToString(hasher.Sum(nil)) 
} 

func GetSha1Hash(text string) string { 
    hasher := sha1.New() 
    hasher.Write([]byte(text)) 
    return hex.EncodeToString(hasher.Sum(nil)) 
} 

func GetSha224Hash(text string) string { 
    hasher := sha224.New() 
    hasher.Write([]byte(text)) 
    return hex.EncodeToString(hasher.Sum(nil)) 
} 

func GetSha256Hash(text string) string { 
    hasher := sha256.New() 
    hasher.Write([]byte(text)) 
    return hex.EncodeToString(hasher.Sum(nil)) 
} 

func GetSha512Hash(text string) string { 
    hasher := sha512.New() 
    hasher.Write([]byte(text)) 
    return hex.EncodeToString(hasher.Sum(nil)) 
} 

func CToGoString(c []byte) string { 
    n := -1 
    for i, b := range c { 
     if b == 0 { 
      break 
     } 
     n = i 
    } 
    return string(c[:n+1]) 
} 

Antwort

3

Es gibt kein sha224 Paket wird der SHA224-Algorithmus in dem crypto/sha256 Paket implementiert (zusammen mit SHA256 natürlich). Dies liegt daran, dass SHA224 einfach eine verkürzte Version von SHA256 ist.

Sie richtig importiert, dass, verwenden Sie die Funktion sha256.New224() ein neues SHA224 „Hasher“ zu erwerben (hash.Hash):

func GetSha224Hash(text string) string { 
    hasher := sha256.New224() 
    hasher.Write([]byte(text)) 
    return hex.EncodeToString(hasher.Sum(nil)) 
} 

Hinweis: Wenn Sie nur einige Daten Hash möchten, brauchen Sie nicht zu schaffen ein Hasher. Die meisten Pakete bieten eine Verknüpfung, um dies zu tun, z. sha256.Sum224():

func GetSha224Hash(text string) string { 
    s := sha256.Sum224([]byte(text)) 
    return hex.EncodeToString(s[:]) 
} 

Oder hier ist ein Einzeiler:

func GetSha224Hash(text string) string { 
    return fmt.Sprintf("%x", sha256.Sum224([]byte(text))) 
} 
+0

vielen Dank für die Einzeiler, das ist sehr hilfreich und ich änderte sich alles jetzt in meinem Skript. scheint auf die gleiche Weise zu funktionieren. – snapo