2016-08-08 73 views
1

我剛剛開始使用golang並編寫了一個非常小的腳本,除了sha224以外,一切正常。有人可以解釋我爲什麼我得到錯誤(關於我的腳本)?我不需要修正這個錯誤,我想理解它,以防止將來的錯誤從我身邊。crypto/sha256中的GetSha224未聲明名稱

該錯誤49:12:未申報的名稱:sha224表明我沒有聲明的東西,但我無法找到它,因爲我對所有哈希algorythms做同樣的事情。

我不是程序員,也不是golang的專家。它關於我的第一個去程序。

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

回答

3

沒有sha224封裝,SHA224算法在crypto/sha256封裝中實現(連同當然SHA256)。這是因爲SHA224只是SHA256的截斷版本。

您正確導入的是,使用sha256.New224()函數來獲取新的SHA224「散列器」(hash.Hash):

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

注意:如果你只是想湊一些數據,你並不需要創建一個hasher。大多數軟件包提供了一個快捷方式來實現這一點sha256.Sum224()

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

或者這裏是一個班輪:

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

非常感謝你爲一個內膽,那是非常有益的,我現在在我的腳本改變了一切。似乎以同樣的方式工作。 – snapo