日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

密码技术应用--SM2文件签名验签

發布時間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 密码技术应用--SM2文件签名验签 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

記錄一下對一些稍大文件進行SM2簽名驗簽的實現,這里只列出了核心代碼,其他不涉及的代碼或者有任何疑問可以查看我之前寫的密碼技術專題博客

/* 函數名: sm2Signsm2 簽名算法實現對文件的簽名 參 數:filePathIn , 待簽名文件priKey , 簽名私鑰文件 返回值:簽名后文件名錯誤信息 創建時間及創建者:2021-06-17 Yuan_sr */ func sm2Sign (filePathIn, priKey string) (string, error){//1.打開磁盤的私鑰文件file, err := os.Open(priKey)if err != nil {return "", err}defer file.Close()//2.將私鑰文件中的內容讀出fileInfo, err := file.Stat()if err != nil {return "", err}buf := make([]byte, fileInfo.Size())_, err = file.Read(buf)if err != nil {return "", err}//3.將pem格式私鑰文件解碼并反序列化privateKeyFromPem, err := gmx509.ReadPrivateKeyFromPem(buf, nil)if err != nil {return "", err}//4.創建一個哈希對象hash := sm3.New()inFile, err := os.Open(filePathIn)if err != nil {return "", err}defer inFile.Close()for {n, err := inFile.Read(buf)if err == io.EOF{break}if err != nil && err != io.EOF {return "", err}_, err = hash.Write(buf[:n])if err != nil {return "", err}}hashed := hash.Sum(nil)//5.簽名signText, err := privateKeyFromPem.Sign(rand.Reader, hashed, nil)if err != nil {return "", err}outFile, err := os.Create(signFileName)if err != nil {return "", err}defer outFile.Close()outFile.Write(signText)return signFileName, nil }/* 函數名: sm2Verifysm2 驗簽算法實現對文件的驗簽 參 數:encFile , 密文文件signFile , 簽名文件pubKey , 驗簽公鑰 返回值:驗簽結果錯誤信息 創建時間及創建者:2021-06-17 Yuan_sr */ func sm2Verify(encFile, signFile, pubKey string) (bool, error) {//1.打開磁盤公鑰文件file, err := os.Open(pubKey)if err != nil {return false, err}defer file.Close()fileInfo, err := file.Stat()if err != nil {return false, err}buf := make([]byte, fileInfo.Size())_, err = file.Read(buf)if err != nil {return false, err}//2.將pem格式公鑰解碼并反序列化publicKeyFromPem, err := gmx509.ReadPublicKeyFromPem(buf)if err != nil {return false, err}//3.進行哈西運算hash := sm3.New()inFile, err := os.Open(dvOutPath + encFile)if err != nil {return false, err}defer inFile.Close()for {n, err := inFile.Read(buf)if err == io.EOF{break}if err != nil && err != io.EOF {return false, err}_, err = hash.Write(buf[:n])if err != nil {return false, err}}hashed := hash.Sum(nil)//4.讀取接受到的簽名值sr, err := os.Open(dvOutPath + signFile)if err != nil {return false, err}defer sr.Close()srInfo, err := sr.Stat()if err != nil {return false, err}srBuf := make([]byte, srInfo.Size())_, err = sr.Read(srBuf)if err != nil {return false, err}//5.簽名認證verify := publicKeyFromPem.Verify(hashed, srBuf)return verify, nil } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的密码技术应用--SM2文件签名验签的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。