数字签名代码实现

本文详述了数字签名的实现过程,包括信息摘要、私钥加密、公钥解密等步骤,确保信息的安全传输。同时,介绍了使用DES和RSA加密算法的代码示例,以及Alice向Bob发送信息的服务器端和客户端代码流程。

看了好久关于数据签名的消息,这个是总结最全面的
参考链接:
https://blog.csdn.net/luoye4321/article/details/84401663
自己顺便总结了一下
假如现在 Alice 向 Bob 传送数字信息,为了保证信息传送的保密性、真实性、完整性和不可否认性,需要对传送的信息进行数字加密和签名,其传送过程为:

一、流程

1.Alice 准备好要传送的数字信息(明文);

2.Alice 对数字信息进行哈希运算,得到一个信息摘要;

3.Alice 用自己的私钥对信息摘要进行加密得到 Alice 的数字签名,并将其附在数字信息上;

4.Alice 随机产生一个加密密钥,并用此密码对要发送的信息进行加密,形成密文;

5.Alice 用 Bob 的公钥对刚才随机产生的加密密钥进行加密,将加密后的 DES 密钥连同密文一起传送给Bob;

6.Bob 收到 Alice 传送来的密文和加密过的 DES 密钥,先用自己的私钥对加密的 DES 密钥进行解密,得到 Alice随机产生的加密密钥;

7.Bob 然后用随机密钥对收到的密文进行解密,得到明文的数字信息,然后将随机密钥抛弃;

8.Bob 用 Alice 的公钥对 Alice 的数字签名进行解密,得到信息摘要;

9.Bob 用相同的哈希算法对收到的明文再进行一次哈希运算,得到一个新的信息摘要;

10.Bob 将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。

假定Alice和Bob都已知对方的公钥。

二、流程图

在这里插入图片描述

三、实现代码

1、DES对称加密代码如下:

package encryp
 
import (
	"bytes"
	"crypto/des"
	"crypto/cipher"
)
 
func padding(src []byte,blocksize int) []byte {
   
   
	n:=len(src)
	padnum:=blocksize-n%blocksize
	pad:=bytes.Repeat([]byte{
   
   byte(padnum)},padnum)
	dst:=append(src,pad...)
	return dst
}
 
func unpadding(src []byte) []byte {
   
   
	n:=len(src)
	unpadnum:=int(src[n-1])
	dst:=src[:n-unpadnum]
	return dst
}
 
func EncryptDES(src [
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员界的小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值