用Go校验下载文件之SHA256
用GO校验下载文件之SHA256
原来对计算机和网络使用安全这块不够重视,用了N多年盗版的操作系统和办公软件,为了破解使用过各种激活软件,也安装使用过很多别人破解过的软件;网络下载的文件从不校验。慢慢地,自己越来越谨慎,现在只使用正版的Windows操作系统,或者开源的Linux操作系统,开源的办公软件。。。,总之一句话,来路不明的软件尽量不用,或者在虚拟机上使用。从各种官方网络下载的文件,如果提供了校验码,一定要对文件进行校验。
从现在开始,从go开始,用go实现sha256来校验golang官方下载的go安装文件。go的crypto包提供了很多安全相关的算法,实现文件sha256校验是非常简单的,下面直接上代码。
package main import ( "crypto/sha256" "fmt" "io" "log" "os" ) func main() { if len(os.Args) != 2 { fmt.Printf("Usage: %s filename\n", os.Args[0]) } h := sha256.New() f, err := os.OpenFile(os.Args[1], os.O_RDONLY, 0666) if err != nil { log.Fatal(err) } defer f.Close() buf := make([]byte, 1<<20) for { n, err := io.ReadFull(f, buf) if err == nil || err == io.ErrUnexpectedEOF { _, err = h.Write(buf[0:n]) if err != nil { log.Fatal(err) } } else if err == io.EOF { break } else { log.Fatal(err) } } rslt := h.Sum(nil) fmt.Printf("%x\n", rslt) }
go build 生成 sha256.exe
从golang官方下载最新windows 安装包 go1.9.1.windows-386.msi 校验码 c939b62e32ba3048321546a111c732868b66fe1b58ae9c12b723a02a6a02b27c
下载安装包后,执行
D:\mygo\src\sha256>sha256.exe go1.9.1.windows-386.msi
c939b62e32ba3048321546a111c732868b66fe1b58ae9c12b723a02a6a02b27c
然后sha256.exe的输出和官方提供的校验比对
通过Beyond Compair比较工具比较发现,下载的文件是正确的。
通过这样一小段代码,可以体验到go语言的强大,用go实现各种校验都很容易。(校验只是安全的一小步,如果受到中间人攻击,页面文字和链接都被篡改,校验成功也可能是染毒或染马的文件)