用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实现各种校验都很容易。(校验只是安全的一小步,如果受到中间人攻击,页面文字和链接都被篡改,校验成功也可能是染毒或染马的文件)
用Go校验下载文件之SHA256的更多相关文章
- Linux下校验下载文件的完整性(MD5,SHA1,PGP)
查看: Linux下校验下载文件的完整性(MD5,SHA1,PGP) http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pgp-to- ...
- Windows计算下载文件的SHA256 MD5 SHA1
引用自 http://blog.163.com/licanli2082@126/blog/static/35748686201284611330/ certutil -hashfile yourfil ...
- 初级版python登录验证,上传下载文件加MD5文件校验
服务器端程序 import socket import json import struct import hashlib import os def md5_code(usr, pwd): ret ...
- 使用 PSD Validator 在线校验 PSD 文件的质量
PSD Validator 可以帮助你在线校验 PSD 文件的质量,使用的规则来自 Photoshop Etiquette.Photoshop Etiquette 整理了 PSD 文件的规范,例如删 ...
- VC下载文件 + 显示进度条
在codeproject里找了许久,发现这样一个VC下载文件并显示进度条的源码,于是添加了些中文注释: 1.下载线程函数: UINT DownloadFile(LPVOID pParam) { CWn ...
- 如何用 JavaScript 下载文件
简介 我们知道,下载文件是一个非常常见的需求,但由于浏览器的安全策略的限制,我们通常只能通过一个额外的页面,访问某个文件的 url 来实现下载功能,但是这种用户体验非常不好. 幸好,HTML 5 里面 ...
- Hadoop Shell命令(基于linux操作系统上传下载文件到hdfs文件系统基本命令学习)
Apache-->hadoop的官网文档命令学习:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html FS Shell 调用文件系统( ...
- 使用Bitsadmin 命令下载文件
如果你碰到一个 Sa权限的注入点,你可以执行dos命令,但是你发现站库分离,数据库和web不在一个服务器上,而且悲剧的是数据库服务器又是个内网,这个时候你该怎么办? 这里就需要用到Bitsadmin来 ...
- Linux shell ftp命令下载文件 根据文件日期
需求:ftp获取远程数据的文件,根据文件的创建时间点下载文件. 可以自行扩展根据文件的大小等其他需求. 知识点总结: 1.获取文件的时间: ls -lrt|awk '{print $6" & ...
随机推荐
- 深入浅出多线程——ReentrantLock (二)
深入浅出多线程——ReentrantLock (一)文章中介绍了该类的基本使用,以及在源码的角度分析lock().unlock()方法.这次打算在此基础上介绍另一个极为重要的方法newConditio ...
- 理论篇:关注点分离(Separation of concerns, SoC)
概念 关注点分离(Separation of concerns,SOC)是对只与"特定概念.目标"(关注点)相关联的软件组成部分进行"标识.封装和操纵"的能力, ...
- C#开发Windows窗体应用程序的步骤
使用C#开发应用程序时,一般包括创建项目.界面设计.设置属性.编写程序代码.保存项目.程序运行等6个步骤. 1.创建项目 在Visual Studio2017开发环境中选择“文件”→“新建”→“项目” ...
- SSL/TLS 握手过程详解
在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐.经济.社会关系等都离不开互联网的帮助.在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的.幸运的是,在大牛 ...
- 10970 - Big Chocolate
题意 :已知n*m的巧克力,问需要掰多少次能让巧克力成为最小的一块: #include<iostream> using namespace std; int main() { int n, ...
- 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)
首先,展示一下封装好之后的项目的层级结构. 1.先创建一个RetrofitApiService.java package com.xdw.retrofitrxmvpdemo.http; import ...
- mysql故障解决笔记
错误提示如图 一开始我查询了 [root@web01 mysql]# ls -al /lib/libc* -rwxr-xr-x 1 root root 1909464 Mar 22 01:49 /li ...
- 基于C++11的线程池
1.封装的线程对象 class task : public std::tr1::enable_shared_from_this<task> { public: task():exit_(f ...
- android studio 使用adb命令传递文件到android设备
一:文件传输 在android开发中,有时候需要将文件从pc端传递至android,或者将软件运行的日志,从android设备传递到pc进行分析,我们可以使用windows的cmd窗口,或者andro ...
- Softmax多分类算法
List<double[]> inputs_x = new List<double[]>(); inputs_x.Add(new double[] { 0.2, 0.3 }); ...