数字签名

博客介绍了数字签名的签名和验证过程。签名是对内容哈希后用私钥签名并与源文件发送,验证是对比两个哈希值。还给出了Go实现,同时指出非对称加密存在公钥分发困难问题,可引入第三方认证机构提供数字证书解决。

数字签名

在这里插入图片描述

签名过程
  1. 对内容做哈希
  2. 使用私钥对哈希签名
  3. 将源文件和签名一起发送
验证过程
  1. 对内容做哈希,得到哈希1
  2. 使用公钥对签名进行校验,得到哈希2
  3. 比较哈希1和哈希2
    在这里插入图片描述
go实现

签名过程:

func RsaSignData(filename string, src []byte) ([]byte, error) {
	//读取私钥
	priKey, err := readRsaPriKey(filename)
	if err != nil {
		return nil, err
	}
	//对内容进行哈希
	hash := sha256.Sum256(src)

	//数字签名。参数1:随机数。参数2:私钥。
	//参数3:哈希方法。参数4:内容的哈希值
	signData, err := rsa.SignPKCS1v15(rand.Reader, priKey, crypto.SHA256, hash[:])
	if err != nil {
		return nil, err
	}

	return signData, nil
}

认证过程:

func RsaVerifyData(filename string, src []byte, signData []byte) bool {
	//读取公钥
	pubKey, err := readRsaPubKey(filename)
	if err != nil {
		fmt.Println(err)
		return false
	}
	//对内容进行哈希
	hash := sha256.Sum256(src)

	//签名认证。参数1:公钥。参数2:哈希算法。
	//参数3:哈希值。参数4:待验证的数字签名。
	err = rsa.VerifyPKCS1v15(pubKey, crypto.SHA256, hash[:], signData)
	if err != nil {
		fmt.Println(err)
		return false
	}
	return true
}
非对称加密存在的问题

公钥分发困难:中间人攻击

解决方法:引入第三方认证机构,CA(Certificate Authority):为厂商提供数字证书,从而解决公钥分发困难的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值