Fedoraをダウンロードするときにここからチェックサムを確認できるように、sha256ファイルのチェックサムを計算するWindows用のユーティリティが必要です: https://fedoraproject.org/static/checksums/Fedora-18-i386-CHECKSUM
http://support.Microsoft.com/kb/889768 のMicrosoftユーティリティは、md5とsha1のみを実行します。
署名されておらず、httpsや私が知らないソースから入手できない他のダウンロード可能なツールを使用したくないのは、暗号化されていない接続を介して、または信頼できないソースから署名されていないコードをダウンロードして検証することは意味がないためです。それを信頼するための別のコードの署名。
幸いなことに、グーグルはすべてのダウンロードにhttpsを使用する可能性を提供しているので、安全な接続を介してダウンロードし、そこから開始できます。
これは小さなファイルに対してそれを行う単純なコードですが、ストリーミングではないため、大きなファイルにはあまり適していません。
package main
import (
"io/ioutil"
"crypto/sha256"
"os"
"log"
"encoding/hex"
)
func main() {
hasher := sha256.New()
s, err := ioutil.ReadFile(os.Args[1])
hasher.Write(s)
if err != nil {
log.Fatal(err)
}
os.Stdout.WriteString(hex.EncodeToString(hasher.Sum(nil)))
}
ストリームを使用して、任意のファイルサイズで機能するようにする方法。
SHA256ハッシャーは_io.Writer
_インターフェースを実装しているため、1つのオプションは、io.Copy()
関数を使用して、適切な_io.Reader
_からブロック内のデータをコピーすることです。このようなことをする必要があります:
_f, err := os.Open(os.Args[1])
if err != nil {
log.Fatal(err)
}
defer f.Close()
if _, err := io.Copy(hasher, f); err != nil {
log.Fatal(err)
}
_
crypto/sha256 godoc には実際には スニペット があり、その方法を示しています(基本的にはJamesと同じコードです)。
package main
import (
"crypto/sha256"
"fmt"
"io"
"log"
"os"
)
func main() {
f, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
defer f.Close()
h := sha256.New()
if _, err := io.Copy(h, f); err != nil {
log.Fatal(err)
}
fmt.Printf("%x", h.Sum(nil))
}
Md5sumの完全な例:
_func md5sum(filePath string) (result string, err error) {
file, err := os.Open(filePath)
if err != nil {
return
}
defer file.Close()
hash := md5.New()
_, err = io.Copy(hash, file)
if err != nil {
return
}
result = hex.EncodeToString(hash.Sum(nil))
return
}
_
EncodeToString
は先頭の0バイトを省略しないため、fmt.Println(hex.EncodeToString([]byte{0x00, 0x00, 0xA, 0xB, 0xC}))
は_00000a0b0c
_を返します