信息数据化
和传输网络化
对数据和数据传输的安全提出了要求
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提供了MD5
、SHA-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
服务器把用户请求的网页用密钥加密,并返回给用户
用户浏览器用密钥解密服务器发来的网页数据,并将其显示出来