密码技术--RSA数字签名及Go语言应用
生活随笔
收集整理的這篇文章主要介紹了
密码技术--RSA数字签名及Go语言应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數字簽名的流程
1.打開磁盤的私鑰文件
2.將私鑰文件中的內容讀出
3.使用pem對數據解碼,得到pem.Block結構體變量
4.x509將數據解析成私鑰結構體得到私鑰
5.創建一個哈希對象
6.給哈希對象添加數據
7.計算哈希值
8.使用rsa中的函數對散列值簽名
數字認證的流程
1.打開磁盤的公鑰文件
2.使用pem解碼得到pem.Block結構體變量
3.使用x509對pem.Block中的變量進行解析得到一個公鑰接口
4.進行類型斷言得到公鑰結構體
5.對原始消息進行哈希運算(和簽名算法使用的哈希算法一致)
- 創建哈希接口
- 添加數據
- 哈希運算
6.簽名認證
數字簽名go 中應用
package mainimport ("crypto""crypto/rand""crypto/rsa""crypto/sha256""crypto/x509""encoding/pem""os" )//RSA 簽名 func SignRSA(plainText []byte, priFileName string) []byte {//1.打開磁盤的私鑰文件file, err := os.Open(priFileName)if err != nil {panic(err)}defer file.Close()//2.將私鑰文件中的內容讀出fileInfo, err := file.Stat()if err != nil {panic(err)}buf := make([]byte, fileInfo.Size())_, err = file.Read(buf)if err != nil {panic(err)}//3.使用pem對數據解碼,得到pem.Block結構體變量block, _ := pem.Decode(buf)//4.x509將數據解析成私鑰結構體得到私鑰privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)if err != nil {panic(err)}//5.創建一個哈希對象hash := sha256.New()//6.給哈希對象添加數據_, err = hash.Write(plainText)if err != nil {panic(err)}//7.計算哈希值hashed := hash.Sum(nil)//8.使用rsa中的函數對散列值簽名signText, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hashed)if err != nil {panic(err)}return signText }func VerifyRSA(plainText, signText []byte, pubFileName string) bool {//1.打開磁盤的公鑰文件file, err := os.Open(pubFileName)if err != nil {panic(err)}defer file.Close()fileInfo, err := file.Stat()if err != nil {panic(err)}buf := make([]byte ,fileInfo.Size())_, err = file.Read(buf)if err != nil {panic(err)}//2.使用pem解碼得到pem.Block結構體變量block, _ := pem.Decode(buf)//3.使用x509對pem.Block中的變量進行解析得到一個公鑰接口pubKeyInterface, err := x509.ParsePKIXPublicKey(block.Bytes)if err != nil {panic(err)}//4.進行類型斷言得到公鑰結構體publicKey := pubKeyInterface.(*rsa.PublicKey)//5.對原始消息進行哈希運算(和簽名算法使用的哈希算法一致)////* 創建哈希接口hash := sha256.New()//* 添加數據hash.Write(plainText)//* 哈希運算hasded := hash.Sum(nil)////6.簽名認證err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hasded, signText)if err != nil {return false}return true }func main (){src := []byte("### 數字簽名\n\n#### 數字簽名的流程\n\n> 1.打開磁盤的私鑰文件\n> 2.將私鑰文件中的內容讀出\n> 3.使用pem對數據解碼,得到pem.Block結構體變量\n> 4.x509將數據解析成私鑰結構體得到私鑰\n> 5.創建一個哈希對象\n> 6.給哈希對象添加數據\n> 7.計算哈希值\n> 8.使用rsa中的函數對散列值簽名\n\n#### 數字認證的流程\n\n> 1.打開磁盤的公鑰文件\n> 2.使用pem解碼得到pem.Block結構體變量\n> 3.使用x509對pem.Block中的變量進行解析得到一個公鑰接口\n> 4.進行類型斷言得到公鑰結構體\n> 5.對原始消息進行哈希運算(和簽名算法使用的哈希算法一致)\n>\n> * 創建哈希接口\n> * 添加數據\n> * 哈希運算\n>\n> 6.簽名認證")signText := SignRSA(src, "private.pem")flag := VerifyRSA(src, signText, "public.pem")fmt.Println("簽名驗簽結果:", flag) }總結
以上是生活随笔為你收集整理的密码技术--RSA数字签名及Go语言应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 密码技术--消息认证码及go语言应用
- 下一篇: 密码技术--椭圆曲线算法EDCSA数字签