数字签名的流程

1.打开磁盘的私钥文件
2.将私钥文件中的内容读出
3.使用pem对数据解码,得到pem.Block结构体变量
4.x509将数据解析成私钥结构体得到私钥
5.创建一个哈希对象
6.给哈希对象添加数据
7.计算哈希值
8.使用rsa中的函数对散列值签名

数字认证的流程

1.打开磁盘的公钥文件
2.使用pem解码得到pem.Block结构体变量
3.使用x509对pem.Block中的变量进行解析得到一个公钥接口
4.进行类型断言得到公钥结构体
5.对原始消息进行哈希运算(和签名算法使用的哈希算法一致)

  • 创建哈希接口
  • 添加数据
  • 哈希运算

6.签名认证

数字签名go 中应用

package mainimport ("crypto""crypto/rand""crypto/rsa""crypto/sha256""crypto/x509""encoding/pem""os"
)//RSA 签名
func SignRSA(plainText []byte, priFileName string) []byte {//1.打开磁盘的私钥文件file, err := os.Open(priFileName)if err != nil {panic(err)}defer file.Close()//2.将私钥文件中的内容读出fileInfo, err := file.Stat()if err != nil {panic(err)}buf := make([]byte, fileInfo.Size())_, err = file.Read(buf)if err != nil {panic(err)}//3.使用pem对数据解码,得到pem.Block结构体变量block, _ := pem.Decode(buf)//4.x509将数据解析成私钥结构体得到私钥privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)if err != nil {panic(err)}//5.创建一个哈希对象hash := sha256.New()//6.给哈希对象添加数据_, err = hash.Write(plainText)if err != nil {panic(err)}//7.计算哈希值hashed := hash.Sum(nil)//8.使用rsa中的函数对散列值签名signText, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hashed)if err != nil {panic(err)}return signText
}func VerifyRSA(plainText, signText []byte, pubFileName string) bool {//1.打开磁盘的公钥文件file, err := os.Open(pubFileName)if err != nil {panic(err)}defer file.Close()fileInfo, err := file.Stat()if err != nil {panic(err)}buf := make([]byte ,fileInfo.Size())_, err = file.Read(buf)if err != nil {panic(err)}//2.使用pem解码得到pem.Block结构体变量block, _ := pem.Decode(buf)//3.使用x509对pem.Block中的变量进行解析得到一个公钥接口pubKeyInterface, err := x509.ParsePKIXPublicKey(block.Bytes)if err != nil {panic(err)}//4.进行类型断言得到公钥结构体publicKey := pubKeyInterface.(*rsa.PublicKey)//5.对原始消息进行哈希运算(和签名算法使用的哈希算法一致)////* 创建哈希接口hash := sha256.New()//* 添加数据hash.Write(plainText)//* 哈希运算hasded := hash.Sum(nil)////6.签名认证err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hasded, signText)if err != nil {return false}return true
}func main (){src := []byte("### 数字签名\n\n#### 数字签名的流程\n\n> 1.打开磁盘的私钥文件\n> 2.将私钥文件中的内容读出\n> 3.使用pem对数据解码,得到pem.Block结构体变量\n> 4.x509将数据解析成私钥结构体得到私钥\n> 5.创建一个哈希对象\n> 6.给哈希对象添加数据\n> 7.计算哈希值\n> 8.使用rsa中的函数对散列值签名\n\n#### 数字认证的流程\n\n> 1.打开磁盘的公钥文件\n> 2.使用pem解码得到pem.Block结构体变量\n> 3.使用x509对pem.Block中的变量进行解析得到一个公钥接口\n> 4.进行类型断言得到公钥结构体\n> 5.对原始消息进行哈希运算(和签名算法使用的哈希算法一致)\n>\n> * 创建哈希接口\n> * 添加数据\n> * 哈希运算\n>\n> 6.签名认证")signText := SignRSA(src, "private.pem")flag := VerifyRSA(src, signText, "public.pem")fmt.Println("签名验签结果:", flag)
}

密码技术--RSA数字签名及Go语言应用相关推荐

  1. 密码技术--非对称加密算法及Go语言应用

    非对称加密算法 1.对称加密的弊端 秘钥分发困难 可以通过非对称加密完成秘钥的分发 Alice和Bob通信,Alice给Bob发送数据,使用对称加密的流程 1.Bob生成一个非对称的密钥对, 2.Bo ...

  2. 密码技术--对称加密算法及Go语言应用

    对称加密算法 DES Data Encryption Standard (数据加密标准)是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称密码.DES一直以来被美国以及其他国家的政府和银行 ...

  3. Pycrypto与RSA密码技术

    密码与通信 密码技术是一门历史悠久的技术.信息传播离不开加密与解密.密码技术的用途主要源于两个方面,加密/解密和签名/验签. pip install pycrypto RSA 密码算法与签名 RSA是 ...

  4. 开发常见密码技术概念RSA使用示例

    一.单向散列函数 1.1 概念及术语 单向散列函数(one-way hash function)有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash value).单向散 ...

  5. 密码技术应用--RSA文件签名验签

    记录一下对一些稍大文件进行RSA签名验签的实现,这里只列出了核心代码,其他不涉及的代码或者有任何疑问可以查看我之前写的密码技术专题博客 /* 函数名: rsaSignrsa 签名算法实现对文件的签名 ...

  6. [转]密码技术-实现数字信封和数字签名

    密码技术-实现数字信封和数字签名 转载自:http://hi.baidu.com/king0332/item/ea9b19da597aec17e1f46f5b 数字信封是公钥密码体制在实际中的一个应用 ...

  7. 数字签名 那些密码技术_密码学中的数字签名

    数字签名 那些密码技术 A signature is usually used to bind signatory to the message. The digital signature is t ...

  8. 图解密码技术学习笔记

    主题:图解密码技术 简介:密码技术入门学习 参考:译者分享 作者:ybb 时间:2021年12月15日 周自恒直播课学习笔记 4.分组密码的模式 4.1 DES和AES作为对称加密时使用的分组密码只能 ...

  9. 读《图解密码技术》(三):密钥、随机数和应用技术

    最后一篇了,如果还没看过前两篇的,最好先翻回去看看,因为这最后一篇的内容是建立在前两篇的基础之上的.本篇的内容包括密钥.随机数.PGP.SSL/TLS,最后再讲讲密码技术的现状和局限性,以及简单介绍一 ...

最新文章

  1. log4j配置不生效
  2. mysql所有表查询
  3. boost::variant2模块转换构造抛出相关的测试程序
  4. 样式篇之如何实现合并单元格效果 【转】
  5. Java----代码优化篇
  6. What happens when clicking interaction recor工作中心
  7. saml java实现_java-saml
  8. java通信方式_java 认知底层的五种通信方式
  9. Windows NT 内核基本结构
  10. go php 框架,go框架 - Go语言中文网 - Golang中文社区
  11. SAN存储和服务器虚拟化安装方案,ESX/ESXi虚拟化系统与SAN存储结构结合的配置安装流程...
  12. 服务器机器系统,Angel:一种新型分布式机器学习系统
  13. [node]request+watch开发自测的懒人神器
  14. sql server 获取本机的ip地址
  15. 程序员像妹子表白专用代码
  16. simulator相关
  17. VMware Workstation Pro 15.0.2 官方版+激活密钥
  18. 从DDD到PaaS化再到一站式部署——通天塔后端通用版发展之路
  19. JavaScript操作form表单
  20. windows无法完成请求的更改错误代码

热门文章

  1. 如何发布php网站_php网站如何发布【货币问答】- 联合货币
  2. 亚马逊AWS本月第三次出现数据中心断电故障,Coinbase、Slack等受影响
  3. 2020年全球数据中心基础设施收入1650亿美元
  4. 你是否能判断电机损毁风险?
  5. UPS 异常停机案例分析
  6. java https 慢_jetty https慢怎么调优?
  7. c# vscode 配置_使用VSCode开发C#项目
  8. Competition——互联网比赛(编程相关):国内外各种互联网比赛举办时间、条件、细节等详细攻略
  9. PyQt之Eric:成功解决No module named 'my_image_rc'
  10. Ubuntu:成功解决ubuntu使用su切换root出现Authentication failure用户时认证失败