用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实现各种校验都很容易。(校验只是安全的一小步,如果受到中间人攻击,页面文字和链接都被篡改,校验成功也可能是染毒或染马的文件)

 

posted @ 2017-10-12 21:05  majianguo  阅读(1632)  评论(0编辑  收藏  举报