用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. 深入浅出多线程——ReentrantLock (二)

    深入浅出多线程——ReentrantLock (一)文章中介绍了该类的基本使用,以及在源码的角度分析lock().unlock()方法.这次打算在此基础上介绍另一个极为重要的方法newConditio ...

  2. 理论篇:关注点分离(Separation of concerns, SoC)

    概念 关注点分离(Separation of concerns,SOC)是对只与"特定概念.目标"(关注点)相关联的软件组成部分进行"标识.封装和操纵"的能力, ...

  3. C#开发Windows窗体应用程序的步骤

    使用C#开发应用程序时,一般包括创建项目.界面设计.设置属性.编写程序代码.保存项目.程序运行等6个步骤. 1.创建项目 在Visual Studio2017开发环境中选择“文件”→“新建”→“项目” ...

  4. SSL/TLS 握手过程详解

    在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐.经济.社会关系等都离不开互联网的帮助.在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的.幸运的是,在大牛 ...

  5. 10970 - Big Chocolate

    题意 :已知n*m的巧克力,问需要掰多少次能让巧克力成为最小的一块: #include<iostream> using namespace std; int main() { int n, ...

  6. 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)

    首先,展示一下封装好之后的项目的层级结构. 1.先创建一个RetrofitApiService.java package com.xdw.retrofitrxmvpdemo.http; import ...

  7. mysql故障解决笔记

    错误提示如图 一开始我查询了 [root@web01 mysql]# ls -al /lib/libc* -rwxr-xr-x 1 root root 1909464 Mar 22 01:49 /li ...

  8. 基于C++11的线程池

    1.封装的线程对象 class task : public std::tr1::enable_shared_from_this<task> { public: task():exit_(f ...

  9. android studio 使用adb命令传递文件到android设备

    一:文件传输 在android开发中,有时候需要将文件从pc端传递至android,或者将软件运行的日志,从android设备传递到pc进行分析,我们可以使用windows的cmd窗口,或者andro ...

  10. Softmax多分类算法

    List<double[]> inputs_x = new List<double[]>(); inputs_x.Add(new double[] { 0.2, 0.3 }); ...