news 2026/7/28 13:19:47

go SHA256WithRSA

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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.

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/26 21:07:26

FaceFusion人脸替换可用于文化遗产活化再现

FaceFusion人脸替换可用于文化遗产活化再现 在敦煌莫高窟的一幅唐代壁画前,一位游客举起手机扫描二维码——刹那间,画中身着华服的供养人缓缓转头,微笑着开口讲述千年前开凿石窟的故事。这不是科幻电影场景,而是借助AI技术正在实现…

作者头像 李华
网站建设 2026/7/23 23:51:28

出售前如何擦除iPhone数据?9个技巧与3种简单解决方案

iPhone的使用寿命很长,如果保养得当,通常可达10年。但由于苹果频繁更新设备,大多数用户每3年就会通过出售旧设备来升级。然而,在出售之前,采取一些步骤以避免潜在问题是非常重要的。本文将介绍如何在出售前擦除iPhone数…

作者头像 李华
网站建设 2026/7/28 15:39:57

收藏!35岁程序员转型大模型全攻略:凭技术积淀破局,平稳衔接新赛道

35岁,是程序员职业道路上的一道“分水岭”——传统开发岗位的年龄限制、重复劳动的职业倦怠、技术迭代的焦虑感,让不少人陷入“转型无门、坚守乏力”的困境。而大模型浪潮的席卷,恰好为有多年技术积淀的程序员打开了新天窗:你的编…

作者头像 李华
网站建设 2026/7/25 23:12:25

【Python新手村】字典(Dict):别再大海捞针,我有专属“标签”!

哈喽,各位 Python 练习生!在前面的旅程里,我们见识过了列表、元组和集合。今天我们要聊的这位,是 Python 里的“情报局局长”——字典 (Dictionary)。想象一下,如果你在列表里存了 1000 个人的信息,想找“张…

作者头像 李华
网站建设 2026/7/27 18:40:28

【技术教程】Node.js 包管理工具全面对比:npm、npx、pnpm 与 cnpm

Node.js 包管理工具全面对比:npm、npx、pnpm 与 cnpm 以下是对 Node.js 生态中常用包管理工具 npm、npx、pnpm 和 cnpm 的全面对比分析(基于 2025 年现状)。内容涵盖定义、核心理念、使用场景、优劣势对比以及具体使用示例。 1. 定义npm&…

作者头像 李华
网站建设 2026/7/28 2:33:46

咕咕番官网入口 - 免费新番老番动漫在线观看网站

咕咕番(Gugufan)是一个专门为二次元爱好者打造的综合性动漫内容互动平台。它不仅仅局限于传统的番剧播放,更侧重于通过深度解说、专业点评以及趣味互动来丰富用户的追番体验。该平台旨在解决用户“番荒”的痛点,通过精选的优质内容…

作者头像 李华