当前位置: 首页 > news >正文

go SHA256WithRSA

In Go,SHA256WithRSArefers to RSA digital signatures with SHA-256 hashing, a common standard for signing and verification. Here's how to implement it:

1. Generate RSA Key Pair

go

复制

package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "fmt" "os" ) func generateKeys() (*rsa.PrivateKey, error) { // Generate 2048-bit RSA key pair privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { return nil, err } return privateKey, nil } // Save keys to PEM files func savePrivateKey(key *rsa.PrivateKey, filename string) error { file, err := os.Create(filename) if err != nil { return err } defer file.Close() privateKeyBytes := x509.MarshalPKCS1PrivateKey(key) privateKeyPEM := &pem.Block{ Type: "RSA PRIVATE KEY", Bytes: privateKeyBytes, } return pem.Encode(file, privateKeyPEM) }

2. Sign Data with SHA256 + RSA

go

复制

import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" ) func signData(privateKey *rsa.PrivateKey, data []byte) ([]byte, error) { // Hash the data with SHA-256 hash := sha256.Sum256(data) // Sign the hash using RSA-PSS (recommended) or PKCS#1 v1.5 signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hash[:]) if err != nil { return nil, err } return signature, nil }

3. Verify Signature

go

复制

func verifySignature(publicKey *rsa.PublicKey, data, signature []byte) error { hash := sha256.Sum256(data) // Verify the signature err := rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hash[:], signature) if err != nil { return fmt.Errorf("signature verification failed: %w", err) } return nil }

4. Complete Example

go

复制

package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" ) func main() { // Generate keys privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { panic(err) } // Data to sign data := []byte("Hello, SHA256WithRSA!") // Sign signature, err := signData(privateKey, data) if err != nil { panic(err) } fmt.Printf("Signature: %x\n", signature) // Verify publicKey := &privateKey.PublicKey err = verifySignature(publicKey, data, signature) if err != nil { panic(err) } fmt.Println("✅ Signature verified successfully!") }

Key Points

  • crypto.SHA256: Specifies SHA-256 as the hash algorithm

  • rsa.SignPKCS1v15: PKCS#1 v1.5 padding (widely compatible)

  • rsa.SignPSS: More secure PSS padding (recommended for new systems)

  • Hash first: Always hash data before signing; RSA operates on the hash digest

Thecrypto/x509andencoding/pempackages handle key serialization for storage and exchange.

http://www.cnnetsun.cn/news/151460.html

相关文章:

  • Open-AutoGLM vs 竞品:谁才是长链路AI任务处理的真正王者?
  • Web安全测试
  • 当AI实现想法易如反掌时,洞见真正的需求成为关键——某知名密码分析工具的用户反馈挖掘
  • 【干货收藏】企业AI架构实战指南:从框架搭建到场景落地的底层逻辑
  • 收藏这份2025AI高薪指南!大厂抢人大战开启,小白程序员学习大模型正当时
  • 13、FPGA更新与可编程性:安全与应用解析
  • 18、多核心可重构嵌入式系统的安全设计与实现
  • 双非本科生的AI行业逆袭之路:我的经验与心得分享!
  • 运维岗位这么多,你适合哪一个
  • 基于微信小程序的在线家庭娱乐系统毕业设计源码
  • 为什么90%的企业用不好Open-AutoGLM?:硬件选型不当成最大瓶颈(附行业适配白皮书)
  • 模型体积缩小80%仍保持95%精度?Open-AutoGLM量化策略深度拆解
  • 2026年AI产品经理终极学习路线:传统产品经理的转型指南,超详细攻略,不容错过!
  • 【AI Agent可靠性突围】:Open-AutoGLM 7类错误恢复方案实测数据曝光
  • FaceFusion如何优化夜间低光环境下的人脸处理?
  • Open-AutoGLM接入成本大曝光:4个维度评估你的适配级别
  • Open-AutoGLM接口开放度实测:8项关键指标评分,你的项目适合接入吗?
  • 主流AutoGLM框架错误恢复能力对比,哪个真正提升任务成功率?
  • 【AI框架二次开发新标杆】:Open-AutoGLM 4大可扩展性设计,为何被头部企业争相采用?
  • FaceFusion镜像每日下载量突破5000次
  • 从零基础转行渗透测试到如今20k,我经历了什么?
  • 土木人“提桶跑路”零基础转行网络安全,成功实现月入过万
  • HGDB如何提升批量导入数据的速度
  • 11、加勒比与北美地区房地产投资指南
  • 42、太赫兹通信与可见光通信:5G 及未来的前沿技术
  • 46、5G及未来通信中的协同网络技术解析
  • 47、协同网络:过去、现在与未来
  • 50、5G及未来的灵活认知无线电接入技术与频谱感知
  • 58、5G及未来的物理层安全设计
  • 文献综述期末项目的撰写方法与实践研究