密码技术应用--RSA文件签名验签
生活随笔
收集整理的這篇文章主要介紹了
密码技术应用--RSA文件签名验签
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
記錄一下對一些稍大文件進行RSA簽名驗簽的實現,這里只列出了核心代碼,其他不涉及的代碼或者有任何疑問可以查看我之前寫的密碼技術專題博客
/* 函數名: rsaSignrsa 簽名算法實現對文件的簽名 參 數:filePathIn , 待簽名文件priKey , 簽名私鑰文件 返回值:簽名后文件名錯誤信息 創建時間及創建者:2021-06-15 Yuan_sr */ func rsaSign (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對數據解碼,得到pem.Block結構體變量block, _ := pem.Decode(buf)//4.x509將數據解析成私鑰結構體得到私鑰privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)if err != nil {return "", err}//5.創建一個哈希對象hash := sha256.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)signText, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hashed)if err != nil {return "", err}outFile, err := os.Create(signFileName)if err != nil {return "", err}defer outFile.Close()outFile.Write(signText)return signFileName, nil }/* 函數名: rsaVerifyrsa 驗簽算法實現對文件的驗簽 參 數:encFile , 密文文件signFile , 簽名文件pubKey , 驗簽公鑰 返回值:驗簽結果錯誤信息 創建時間及創建者:2021-06-15 Yuan_sr */ func rsaVerify(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解碼得到pem.block結構體變量block, _ := pem.Decode(buf)//3.使用x509對pem.block中的變量進行解析得到一個公鑰接口pubKeyInterface, err := x509.ParsePKIXPublicKey(block.Bytes)if err != nil {return false, err}//4.進行類型斷言得到公鑰結構體publicKey := pubKeyInterface.(*rsa.PublicKey)//5.進行哈西運算hash := sha256.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)//6.讀取接受到的簽名值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}//7.簽名認證err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hashed, srBuf)if err != nil {return false, err}return true, nil }總結
以上是生活随笔為你收集整理的密码技术应用--RSA文件签名验签的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 密码技术应用--SM4文件加解密
- 下一篇: 密码技术应用--SM2文件签名验签