简单的数字签名算法实现 【go版本】

一、我们先介绍一下数字签名的简单步骤:

  • 发送方先将信息(明文)进行单向散列加密生成散列值
  • 发送方将散列值和RSA私钥进行签名操作生成签名密文
  • 发送  <数据+签名密文>
  • 接收方用发送方的公钥对密文进行解密(验证发送方的身份)
  • 接收方使用数据进行单向散列生成散列值(验证数据是否被篡改)
  • 验证

二、具体实现步骤:

1、生成对应RSA加密算法的公钥和私钥

1.1 生成私钥

  • rsa.GenerateKey 生成私钥
  • 对生成的私钥进行X509规范序列化
  • 构建pem的Block
  • 创建pem文件,将序列化后的私钥存储到pem块中:pem.Ecode

1.2  生成公钥(公钥信息在私钥中)

  • 获取公钥信息publicKey
  • 同上进行X509规范序列化并创建pem块
  • 并生成public文件,将密文进行填充pem块内

——————————————数据签名 ——————————————————

2、先对明文信息进行单向散列

  • 两种方式选择即:sha256.Sum256【适合短信息散列】 和 sha256.New【适合长信息散列】

3、使用从private.pem中进行解密

  • 打开private.pem文件进行获取对私钥信息message【pem类型】
  • 对message进行pem中的剥离pem.Decode中的block.Bytes的b数组
  • 对数组进行依据X509规范进行解析得出私钥privateKey

4、使用私钥对散列后的值进行加密

  • 这里的hashed是采用了第一个散列方法对明文数据进行加密
  • 使用rsa的SignPKCS1v15进行签名

——————————————数据签名验证——————————————————

5、使用从public.pem中进行解密

  • 打开public.pem文件进行获取对私钥信息message【pem类型】
  • 对message进行pem中的剥离pem.Decode中的block.Bytes的b数组
  • 对数组进行依据X509规范进行解析得出私钥key
  • 这里需要一个类型断言,强转

6、使用公钥对散列后的值进行加密

  • 这里的hashed是采用了第一个散列方法对明文数据进行加密
  • 使用rsa的VerifyPKCS1v15进行签名

——————————结束——————————————————————————

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值