密码技术应用--SM2文件签名验签
生活随笔
收集整理的這篇文章主要介紹了
密码技术应用--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文件签名验签的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 密码技术应用--RSA文件签名验签
- 下一篇: 文件压缩的一种实现