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
、RSA
、sha1
、Hmac-Sha1
、sha256
、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)詳解
對于任何編程語言來說,運(yùn)算符和控制結(jié)構(gòu)都算是最基礎(chǔ)的知識了,既然是基礎(chǔ),當(dāng)然非常有必要學(xué)習(xí),因此在這篇文章中我們就來討論一下2023-02-02詳解Golang中string的實現(xiàn)原理與高效使用
在Go語言中,無論是字符串常量、字符串變量還是代碼中出現(xiàn)的字符串字面量,它們的類型都被統(tǒng)一設(shè)置為string,下面就跟隨小編一起來了解一下Golang中string的實現(xiàn)原理與高效使用吧2024-01-01Golang中由零值和gob庫特性引起B(yǎng)UG解析
這篇文章主要為大家介紹了Golang中由零值和gob庫特性引起B(yǎng)UG解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04重學(xué)Go語言之基礎(chǔ)數(shù)據(jù)類型詳解
Go語言有非常強(qiáng)大的數(shù)據(jù)類型系統(tǒng),其支持的數(shù)據(jù)類型大體上可分為四類:基礎(chǔ)數(shù)據(jù)類型、引用數(shù)據(jù)類型、接口類型、復(fù)合類型。本文就來講講它們各自的用法吧2023-02-02使用go net實現(xiàn)簡單的redis通信協(xié)議
本文主要介紹了go net實現(xiàn)簡單的redis通信協(xié)議,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12