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

/*
函数名: rsaSignrsa 签名算法实现对文件的签名
参 数:filePathIn ,     待签名文件priKey ,       签名私钥文件
返回值:签名后文件名错误信息
创建时间及创建者:2021-06-15  Yuan_sr
*/
func rsaSign (filePathIn, priKey string) (string, error){//1.打开磁盘的私钥文件file, err := os.Open(priKey)if err != nil {return "", err}defer file.Close()//2.将私钥文件中的内容读出fileInfo, err := file.Stat()if err != nil {return "", err}buf := make([]byte, fileInfo.Size())_, err = file.Read(buf)if err != nil {return "", err}//3.使用pem对数据解码,得到pem.Block结构体变量block, _ := pem.Decode(buf)//4.x509将数据解析成私钥结构体得到私钥privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)if err != nil {return "", err}//5.创建一个哈希对象hash := sha256.New()inFile, err := os.Open(filePathIn)if err != nil {return "", err}defer inFile.Close()for {n, err := inFile.Read(buf)if err == io.EOF{break}if err != nil && err != io.EOF {return "", err}_, err = hash.Write(buf[:n])if err != nil {return "", err}}hashed := hash.Sum(nil)signText, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hashed)if err != nil {return "", err}outFile, err := os.Create(signFileName)if err != nil {return "", err}defer outFile.Close()outFile.Write(signText)return signFileName, nil
}/*
函数名: rsaVerifyrsa 验签算法实现对文件的验签
参 数:encFile ,        密文文件signFile ,      签名文件pubKey ,        验签公钥
返回值:验签结果错误信息
创建时间及创建者:2021-06-15  Yuan_sr
*/
func rsaVerify(encFile, signFile, pubKey string) (bool, error) {//1.打开磁盘公钥文件file, err := os.Open(pubKey)if err != nil {return false, err}defer file.Close()fileInfo, err := file.Stat()if err != nil {return false, err}buf := make([]byte, fileInfo.Size())_, err = file.Read(buf)if err != nil {return false, err}//2.使用pem解码得到pem.block结构体变量block, _ := pem.Decode(buf)//3.使用x509对pem.block中的变量进行解析得到一个公钥接口pubKeyInterface, err := x509.ParsePKIXPublicKey(block.Bytes)if err != nil {return false, err}//4.进行类型断言得到公钥结构体publicKey := pubKeyInterface.(*rsa.PublicKey)//5.进行哈西运算hash := sha256.New()inFile, err := os.Open(dvOutPath + encFile)if err != nil {return false, err}defer inFile.Close()for {n, err := inFile.Read(buf)if err == io.EOF{break}if err != nil && err != io.EOF {return false, err}_, err = hash.Write(buf[:n])if err != nil {return false, err}}hashed := hash.Sum(nil)//6.读取接受到的签名值sr, err := os.Open(dvOutPath + signFile)if err != nil {return false, err}defer sr.Close()srInfo, err := sr.Stat()if err != nil {return false, err}srBuf := make([]byte, srInfo.Size())_, err = sr.Read(srBuf)if err != nil {return false, err}//7.签名认证err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hashed, srBuf)if err != nil {return false, err}return true, nil
}

密码技术应用--RSA文件签名验签相关推荐

  1. 密码技术应用--SM2文件签名验签

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

  2. 叙述无保密机制的rsa签名过程_安全系列之——RSA的公钥私钥有多少人能分的清楚?RSA的签名验签与加密解密如何使用公私钥?...

    在对接很多的互联网公司的开发平台时,这些互联网公司未来自身平台的安全,都会需要调用方签名确认调用方的身份是合法的,同时未来信息网络传输的安全可能还需要加密解密.比如对接支付宝.微信开放平台时,需要配置 ...

  3. 工银e生活开发脱坑日志(1)RSA密钥签名验签windows环境下配置

    **环境配置:**阿里云 windows 2012 R2,WAMPSERVER 3.0.17集成环境 **入坑问题:**RSA2密钥对的生产及验签,产生报错信息:Warning: openssl_ve ...

  4. JAVA使用PGP对文件签名+验签

    首先:介绍一下PGP是啥: 1991年, 一个叫Phil_Zimmermann的程序员, 为了传输加密报文, 开发的一款加密软件,:pgp, 但是它是商用程序, 后来自由软件觉得好用, 开发了一个开源 ...

  5. 如何使用RSA 对数据加解密和签名验签?一篇文章带你搞定

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 三分割据纡筹策,万古云霄一羽毛. ...

  6. [crypto]-52-python3中rsa(签名验签加密解密)aes(ecb cbc ctr)hmac的使用,以及unittest测试用

    环境: 在ubuntu14.04下,记得安装:sudo pip3 install pycrypto 代码示例1: =========================== import base64 f ...

  7. js rsa验签_js rsa sign使用笔记(加密,解密,签名,验签)

    你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...

  8. 数据安全管理:RSA加密算法,签名验签流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.RSA算法简介 1.加密解密 RSA加密是一种非对称加密,在公开密钥加密和电子商业中RSA被广泛使用.可以在不直接传递密钥的情况下,完成加 ...

  9. Java 实现 RSA 非对称加密算法-加解密和签名验签

    1. 非对称加密算法简介 非对称加密算法又称现代加密算法,是计算机通信安全的基石,保证了加密数据不会被破解.与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密(pr ...

最新文章

  1. pygame-KidsCanCode系列jumpy-part10-角色动画(上)
  2. php类型优先级_PHP: 运算符优先级 - Manual
  3. 【推荐】整理者:明日互联网的枢纽角色
  4. MySQL DBA面试全揭秘
  5. 28335接两个spi设备_SPI浅析
  6. 【AC自动机】前缀匹配(ybtoj AC自动机-3)
  7. vtk环境搭建(windowsXP/win7,vtk6.0.0+cmake2.8+vs2010)
  8. JavaScript中有关数据结构和算法的最佳书籍
  9. Kubernetes NetworkPolicy 工作原理浅析
  10. testng重跑和框架亮点
  11. c语言如何在手机上运行程序,各位前辈这两个程序怎么在手机上运行
  12. 浅析我对代码规范的理解
  13. [求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
  14. OriginPro 2021 设置成中文(软件自带)
  15. 如何创造一个能和你对话的语音AI?
  16. 用好这 43 款 Chrome 插件,让你开发学习一下子好轻松!
  17. 【记录一些名人博客地址】
  18. 2021年转行软件测试能有前景吗?
  19. pytorch Module里的children()与modules()的区别
  20. linux 下使用isign 签名ipa包

热门文章

  1. 八皇后java_经典八皇后问题:Java语言
  2. 工信部公示国家新型数据中心典型案例名单
  3. 什么是光纤的波长?看看有哪些是你不知道的!
  4. 数据中心柴油发电机组功率有哪几种?
  5. 数据中心不仅可以好看,还可以变身大型暖气!
  6. 成功解决OSError: cannot open resource File F:Python36\lib\site-packages\PIL\ImageFont.py, self.font
  7. AI公开课:19.03.13沈徽-商汤副总裁《AI创新与落地》课堂笔记以及个人感悟
  8. ML之NB:利用朴素贝叶斯NB算法(CountVectorizer+不去除停用词)对fetch_20newsgroups数据集(20类新闻文本)进行分类预测、评估
  9. Dataset之Boston:Boston波士顿房价数据集的简介、下载、使用方法之详细攻略
  10. Keras之DNN:基于Keras(sigmoid+linear+mse+predict)利用DNN实现回归预测——DIY多分类数据集预测新数据点