欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言實現(xiàn)RSA加解密算法詳解

 更新時間:2023年06月04日 09:33:24   作者:JonLee  
隨著互聯(lián)網(wǎng)的高速發(fā)展,人們對安全的要求也越來越高,加解密也變得越來越重要,本文主要為大家介紹了Go語言中實現(xiàn)RSA加解密與簽名驗證算法,希望對大家有所幫助

隨著互聯(lián)網(wǎng)的高速發(fā)展,人們對安全的要求也越來越高。密碼學(xué)中兩大經(jīng)典算法,一個是對稱加解密,另一個是非對稱加解密,這里就來分享一下非對稱加密算法的代表:RSA加解密。

在Go語言中實現(xiàn)RSA加解密還是比較簡單的,網(wǎng)上很多教程都是基于Go原生標(biāo)準(zhǔn)庫寫的,代碼量較多。這里分享一個好用的庫:https://github.com/forgoer/openssl 。

安裝

go get https://github.com/forgoer/openssl

秘鑰生成

秘鑰可以生成在文件里,也是生成到Buffer里,只要實現(xiàn)了io.Writer即可。

import (
    "io/ioutil"
    "os"

    "github.com/forgoer/openssl"
)

func main() {

    // 創(chuàng)建私鑰文件
    priFile, err := os.Create("private.key") // 也可以使用buffer, priBuf := bytes.NewBuffer(nil)
    if err != nil {
        panic(err)
    }
    defer priFile.Close()
    // 生成私鑰到文件
    _ = openssl.RSAGenerateKey(1024, priFile)

    // 創(chuàng)建公鑰文件
    pubFile, err := os.Create("public.key")
    if err != nil {
        panic(err)
    }
    defer priFile.Close()

    // 通過私鑰生成公鑰到文件
    priByte, _ := ioutil.ReadFile("private.key")
    _ = openssl.RSAGeneratePublicKey(priByte, pubFile)
}

加解密

使用公鑰加密,私鑰解密。

src := []byte("123456")
    pubByte, _ := ioutil.ReadFile("public.key")
    // 公鑰加密
    dst, _ := openssl.RSAEncrypt(src, pubByte)


    priByte, _ := ioutil.ReadFile("private.key")
    // 私鑰解密
    res, _ := openssl.RSADecrypt(dst, priByte)


    fmt.Println(string(res)) // 123456

簽名及驗證

使用私鑰簽名,公鑰驗證。

// 私鑰簽名
    sign, err := openssl.RSASign([]byte("123456"), priByte, crypto.SHA256)
    if err != nil {
        panic(err)
    }

    // 公鑰驗證簽名
    err = openssl.RSAVerify([]byte("123456"), sign, pubByte, crypto.SHA256)
    if err != nil {
        panic(err)
    }

這個加解密庫:https://github.com/forgoer/openssl,它還支持AES、DES、RSAsha1、Hmac-Sha1sha256、Hmac-Sha256等常用算法。

到此這篇關(guān)于Go語言實現(xiàn)RSA加解密算法詳解的文章就介紹到這了,更多相關(guān)Go語言RSA加解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 重學(xué)Go語言之運(yùn)算符與控制結(jié)構(gòu)詳解

    重學(xué)Go語言之運(yùn)算符與控制結(jié)構(gòu)詳解

    對于任何編程語言來說,運(yùn)算符和控制結(jié)構(gòu)都算是最基礎(chǔ)的知識了,既然是基礎(chǔ),當(dāng)然非常有必要學(xué)習(xí),因此在這篇文章中我們就來討論一下
    2023-02-02
  • Golang中日志使用詳解

    Golang中日志使用詳解

    這篇文章記錄了Golang項目中日志使用,以及結(jié)合Gin框架記錄請求日志,文中通過代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 詳解Golang中string的實現(xiàn)原理與高效使用

    詳解Golang中string的實現(xiàn)原理與高效使用

    在Go語言中,無論是字符串常量、字符串變量還是代碼中出現(xiàn)的字符串字面量,它們的類型都被統(tǒng)一設(shè)置為string,下面就跟隨小編一起來了解一下Golang中string的實現(xiàn)原理與高效使用吧
    2024-01-01
  • Go語言斷言和類型查詢的實現(xiàn)

    Go語言斷言和類型查詢的實現(xiàn)

    Go語言變量類型包含基礎(chǔ)類型和復(fù)合類型,類型斷言一般是對基礎(chǔ)類型的處理,本文主要介紹了Go語言斷言和類型查詢的實現(xiàn),感興趣的可以了解一下
    2024-01-01
  • golang進(jìn)行xml文件解析的操作方法

    golang進(jìn)行xml文件解析的操作方法

    本文介紹了Go語言中解析XML文件的幾種方法:小文件解析、大文件流式解析和復(fù)雜結(jié)構(gòu)解析,對于小文件,使用標(biāo)準(zhǔn)庫中的encoding/xml包;對于大文件,采用流式解析以避免內(nèi)存溢出,對于復(fù)雜結(jié)構(gòu)的XML文件,推薦使用第三方庫github.com/beevik/etree
    2024-11-11
  • Golang中由零值和gob庫特性引起B(yǎng)UG解析

    Golang中由零值和gob庫特性引起B(yǎng)UG解析

    這篇文章主要為大家介紹了Golang中由零值和gob庫特性引起B(yǎng)UG解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 重學(xué)Go語言之基礎(chǔ)數(shù)據(jù)類型詳解

    重學(xué)Go語言之基礎(chǔ)數(shù)據(jù)類型詳解

    Go語言有非常強(qiáng)大的數(shù)據(jù)類型系統(tǒng),其支持的數(shù)據(jù)類型大體上可分為四類:基礎(chǔ)數(shù)據(jù)類型、引用數(shù)據(jù)類型、接口類型、復(fù)合類型。本文就來講講它們各自的用法吧
    2023-02-02
  • Go語言題解LeetCode455分發(fā)餅干示例詳解

    Go語言題解LeetCode455分發(fā)餅干示例詳解

    這篇文章主要為大家介紹了Go語言題解LeetCode455分發(fā)餅干示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 使用go net實現(xiàn)簡單的redis通信協(xié)議

    使用go net實現(xiàn)簡單的redis通信協(xié)議

    本文主要介紹了go net實現(xiàn)簡單的redis通信協(xié)議,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 一文帶你深入了解Go語言中的事務(wù)

    一文帶你深入了解Go語言中的事務(wù)

    事務(wù)中止時,你結(jié)束事務(wù)了嗎?在開發(fā)時有可能就會犯這樣的錯誤,其問題就是你在提交事務(wù)時,如果中間有其他業(yè)務(wù)就取消操作,那么事務(wù)也關(guān)閉了嗎?本文就來詳細(xì)講講
    2023-04-04

最新評論