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數字簽名的作用 該技術在具體工作時,首...