Go语言编程笔记--安全编程

信息数据化传输网络化 对数据和数据传输的安全提出了要求

1 数据加密

单密钥的加密算法 (对称加密)

在加密和解密中,使用的密钥只有一个

私钥不能暴露

需要加密的明文 + 加密算法 + 密钥

常见的单密钥加密算法有DES、AES、RC4等

双密钥的加密算法 (为非对称加密)

私钥和公钥都可以被用作加密或者解密

公钥是公开的,私钥是保密的, 只有公钥发布方才能解开密文

但是用私钥加密的明文,必须要用对应的公钥解密,用公钥加密的明文,必须用对应的私钥解密

需要加密的明文 + 加密算法 + 私钥 + 公钥

常见的双密钥加密算法有RSA等

哈希算法 (只需要加密,形成一个密文,而不需要解密)

从任意数据中创建固定长度摘要信息的办法

常见的哈希算法包括MD5、SHA-1等

2 数字签字

数字签名,是指用于标记数字文件拥有者、创造者、分发者身份的字符串。

数字签名拥有标记文件身份分发的不可抵赖性等作用。

常用的数字签名采用了非对称加密

A公司发布了一个可执行文件,称为AProduct.exe,A在AProduct.exe中加入了A公司的数字签名
A公司的数字签名是用A公司的私钥加密了AProduct.exe文件的哈希值,我们得到打过数字签名的AProduct.exe后,
可以查看数字签名。这个过程实际上是用A公司的公钥解密了文件

3 数字证书

数字证书中包含了银行的公钥

登录某银行的网站, 下载数字证书

使用U盾的时候, 初始化过程即是向U盾中下载数字证书

有了公钥之后,网银就可以用公钥加密我们 提供给银行的信息,这样只有银行才能用对应的私钥得到我们的信息

4 PKI 体系

全称公钥基础设施 ,是使用非对称加密理论提供数字签名、加密、数字证书等服务的体系

一般包括权威认证机构(CA)、数字证书库、密钥备份及恢复系统、证书作废系统、应 用接口(API)

围绕PKI体系,建立了一些权威的、公益的机构。它们提供数字证书库、密钥备份及恢复系 统、证书作废系统、应用接口等具体的服务

5 Go 中的哈希函数

Go提供了MD5SHA-1等几种哈希函数


// 字符串操作

package main

import(
"fmt"
"crypto/sha1"
"crypto/md5"
)

func main(){
	TestString:="Hi,pandaman!"

	Md5Inst:=md5.New()
	Md5Inst.Write([]byte(TestString))
	Result:=Md5Inst.Sum([]byte(""))
	fmt.Printf("%x\n\n",Result)

	Sha1Inst:=sha1.New()
	Sha1Inst.Write([]byte(TestString))
	Result=Sha1Inst.Sum([]byte(""))
	fmt.Printf("%x\n\n",Result)
}


// 对文件内容计算


package main
import (
 "io"
 "fmt"
 "os"
 "crypto/md5"
 "crypto/sha1"
)
func main() {
     TestFile := "123.txt"
     infile, inerr := os.Open(TestFile)
    if inerr == nil {
         md5h := md5.New()
         io.Copy(md5h, infile)
         fmt.Printf("%x %s\n",md5h.Sum([]byte("")), TestFile)
         sha1h := sha1.New()
         io.Copy(sha1h, infile)
         fmt.Printf("%x %s\n",sha1h.Sum([]byte("")), TestFile)
     } else {
         fmt.Println(inerr)
         os.Exit(1)
     }
}

6 加密通信

一般的HTTPS是基于SSL(Secure Sockets Layer)协议

SSL是网景公司开发的位于TCP与HTTP之间透明安全协议,通过SSL,可以把HTTP包数据以非对称加密的形式往返于浏览器和 站点之间,从而避免被第三方非法获取

TLS(Transport Layer Security)由IETF(Internet Engineering Task Force)实现, 建立于SSL v3.0之上的兼容协议

主要的区别在于所支持的加密算法

SSL/TLS的工作方式。

  在浏览器中输入HTTPS协议的网址 


  服务器向浏览器返回证书,浏览器检查该证书的合法性
 
 
  验证合法性
  
  浏览器使用证书中的公钥加密一个随机对称密钥,并将加密后的密钥和使用密钥加密后
  的请求URL一起发送到服务器
  
  服务器用私钥解密随机对称密钥,并用获取的密钥解密加密的请求URL
  
  服务器把用户请求的网页用密钥加密,并返回给用户
  
  用户浏览器用密钥解密服务器发来的网页数据,并将其显示出来
Buy me a 肥仔水!