數字簽名(RSA) golang

2021-08-28 22:56:15 字數 2334 閱讀 1807

package main    

import (

"crypto/rsa"

"crypto/rand"

"crypto/x509"

"encoding/pem"

"os"

"crypto/sha256"

"crypto"

"fmt"

)func main()

err = verifyrsa(sourcedata, signdata)

if err != nil

fmt.println("校驗正確:")

}func signaturersa(sourcedata byte) (byte, error)

info, err := file.stat()

if err != nil

buf := make(byte, info.size())

file.read(buf)

//解析

block, _ := pem.decode(buf)

privatekey, err := x509.parsepkcs1privatekey(block.bytes)

if err != nil

//雜湊加密

myhash := sha256.new()

myhash.write(sourcedata)

hashres := myhash.sum(nil)

//對雜湊結果進行簽名

res, err := rsa.signpkcs1v15(rand.reader, privatekey, crypto.sha256, hashres)

if err != nil

defer file.close()

return res, nil

}func verifyrsa(sourcedata, signeddata byte) error

info, err := file.stat()

if err != nil

buf := make(byte, info.size())

file.read(buf)

//pem解密

block, _ := pem.decode(buf)

publicinte***ce, err := x509.parsepkixpublickey(block.bytes)

if err != nil

publickey := publicinte***ce.(*rsa.publickey)

//元資料雜湊加密

mysha := sha256.new()

mysha.write(sourcedata)

res := mysha.sum(nil)

//校驗簽名

err = rsa.verifypkcs1v15(publickey, crypto.sha256, res, signeddata)

if err != nil

defer file.close()

return nil

}//生成金鑰對

func generatersakey(bit int) error

//x509私鑰序列化

privatestream := x509.marshalpkcs1privatekey(private)

//將私鑰設定到pem結構中

block := pem.block

//儲存磁碟

file, err := os.create("e:/go/src/sign/privatekey.pem")

if err != nil

//pem編碼

err = pem.encode(file, &block)

if err != nil

//*****====public*****====

public := private.publickey

//509序列化

publicstream, err := x509.marshalpkixpublickey(&public)

if err != nil

//公鑰賦值pem結構體

pubblock := pem.block

//儲存磁碟

pubfile, err := os.create("e:/go/src/sign/publickey.pem")

if err != nil

//pem編碼

err = pem.encode(pubfile, &pubblock)

if err != nil

return nil

}

數字簽名簽名概述

數字簽名的技術流程描述 1 傳送者使用摘要演算法對傳送資訊產生資訊摘要 2 傳送者使用自己的私鑰對資訊摘要進行簽名 3 傳送者將資訊本身和已簽名的摘要一起傳送出去 4 接收者使用相同的摘要演算法對資訊本身計算資訊摘要 5 接收者使用傳送者的公鑰對簽名的摘要就行驗籤,獲得資訊傳送者的資訊摘要 6 接收...

數字信封 數字簽名

2019 08 06 19 51 51 數字簽名是用來表明資料傳送者身份的,有了簽名就說明這個資料是傳送都發出來的。為什麼?因為可以用你的公鑰開啟你的簽名資訊,獲取明文的hash值。數字信封,被公鑰加密後的對稱密碼被稱為數字信封,用於對稱金鑰的交換。數字證書,用來證明資料傳送者的身份的。為什麼能證明...

數字簽名技術

在當今高速發展的網路資訊化時代,人們越來越重視資訊的安全性問題,電子資訊內容的安全已經成為倍受關注的問題,數字簽名技術作為資訊保安領域的一項重要技術,應用日益廣泛。論述了數字簽名的作用及實現方法技術,並介紹了當前數字簽名的幾種新技術,展望了這一領域的發展前景。1數字簽名的作用 該技術在具體工作時,首...