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

用Go校验下载文件之SHA256的更多相关文章

  1. Linux下校验下载文件的完整性(MD5,SHA1,PGP)

    查看: Linux下校验下载文件的完整性(MD5,SHA1,PGP) http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pgp-to- ...

  2. Windows计算下载文件的SHA256 MD5 SHA1

    引用自 http://blog.163.com/licanli2082@126/blog/static/35748686201284611330/ certutil -hashfile yourfil ...

  3. 初级版python登录验证,上传下载文件加MD5文件校验

    服务器端程序 import socket import json import struct import hashlib import os def md5_code(usr, pwd): ret ...

  4. 使用 PSD Validator 在线校验 PSD 文件的质量

     PSD Validator 可以帮助你在线校验 PSD 文件的质量,使用的规则来自 Photoshop Etiquette.Photoshop Etiquette 整理了 PSD 文件的规范,例如删 ...

  5. VC下载文件 + 显示进度条

    在codeproject里找了许久,发现这样一个VC下载文件并显示进度条的源码,于是添加了些中文注释: 1.下载线程函数: UINT DownloadFile(LPVOID pParam) { CWn ...

  6. 如何用 JavaScript 下载文件

    简介 我们知道,下载文件是一个非常常见的需求,但由于浏览器的安全策略的限制,我们通常只能通过一个额外的页面,访问某个文件的 url 来实现下载功能,但是这种用户体验非常不好. 幸好,HTML 5 里面 ...

  7. Hadoop Shell命令(基于linux操作系统上传下载文件到hdfs文件系统基本命令学习)

    Apache-->hadoop的官网文档命令学习:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html FS Shell 调用文件系统( ...

  8. 使用Bitsadmin 命令下载文件

    如果你碰到一个 Sa权限的注入点,你可以执行dos命令,但是你发现站库分离,数据库和web不在一个服务器上,而且悲剧的是数据库服务器又是个内网,这个时候你该怎么办? 这里就需要用到Bitsadmin来 ...

  9. Linux shell ftp命令下载文件 根据文件日期

    需求:ftp获取远程数据的文件,根据文件的创建时间点下载文件. 可以自行扩展根据文件的大小等其他需求. 知识点总结: 1.获取文件的时间: ls -lrt|awk '{print $6" & ...

随机推荐

  1. Java语句语法

    一.流程控制语句 1.分支语句 1)if else 语法:(写法1) if(条件1){     //写一次 满足条件1执行在代码 }else if(条件2){    //写0或n次 不满足条件1,满足 ...

  2. jquery无new构建学习笔记

    当我们想要创建一个对象,我们可能使用new方法去构建一个对象,那按道理jquery也是一个对象,应该也是用new jquery()来构建呀为什么我们创建jquery对象不用new jquery()而是 ...

  3. Libevent 反应堆的初始化

    // 默认情况下new eventbase struct event_base * event_base_new(void) { struct event_base *base = NULL; //初 ...

  4. bootstarp-fileinput上传 火狐防止拖入文件直接打开新页面

    今日接触了一个bootstarp的上传插件,发现其功能很强大,具体名为bootstarp-fileinput,需要的可以自行度一下. 然后当使用其拖拽功能时,其他浏览器没出毛病,独火狐浏览器拖入时直接 ...

  5. 企业实战Nginx+Tomcat动静分离架构的技术分享

    Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离.严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat.Re ...

  6. P1629 邮递员送信

    题目描述: 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员 ...

  7. hiho-1015- KMP算法

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  8. OGNL简介

    OGNL 一:OGNL简介 OGNL的全称是Object  Graph  Navigation  Language即对象导航语音.它是一个开源项目,工作在视图层,用来取代页面中的java脚本.简化数据 ...

  9. 利用InfluxDB和Grafana搭建数据监测的仪表盘

    InfluxDB的介绍及安装 InfluxDB是支持持续写入的时序数据库,常用于监测系统所需要的数据的存储. 官网的详细安装步骤 https://docs.influxdata.com/influxd ...

  10. Java SE 8 流库(二)

    1.3. filter,map,flatMAP方法 流的转换会产生一个新流,它的元素派生出自另一个流中的元素: Stream<T> filter(Predicate<? super ...