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

使用Golang實(shí)現(xiàn)Sm2加解密的代碼詳解

 更新時(shí)間:2024年03月15日 09:46:43   作者:ZhongYuxuanG  
本文主要介紹了Go語(yǔ)言實(shí)現(xiàn)Sm2加解密的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Golang實(shí)現(xiàn)國(guó)密Sm2加解密

  • SM2 橢圓曲線(xiàn)公鑰密碼算法,SM2曲線(xiàn)實(shí)現(xiàn)性能和Golang SDK中的NIST P256橢圓曲線(xiàn)原生實(shí)現(xiàn)(非BoringCrypto)類(lèi)似,也對(duì)amd64 和 arm64架構(gòu)做了專(zhuān)門(mén)匯編優(yōu)化實(shí)現(xiàn),SM2包實(shí)現(xiàn)了SM2橢圓曲線(xiàn)公鑰密碼算法的數(shù)字簽名算法、公鑰加密算法、密鑰交換算法,中的密鑰對(duì)保護(hù)數(shù)據(jù)格式。
  • SM2 公私鑰對(duì)的話(huà),要么是自己產(chǎn)生,要么是別的系統(tǒng)產(chǎn)生后通過(guò)某種方式傳輸給您的。
  • SM2公鑰加密算法支持的密文編碼格式有兩種
  • 簡(jiǎn)單串接方式: C1C3C2,曾經(jīng)老的標(biāo)準(zhǔn)為 C1C2C3
  • ASN.1格式

安裝

  • go get github.com/emmansun/gmsm

以下Dome自行添加err

實(shí)例:Sm2加密Dome

  • 如果您需要普通拼接編碼輸出,您可以調(diào)用sm2.Encrypt方法,其中EncrypterOpts類(lèi)型參數(shù)可以傳入nil,表示默認(rèn)C1C3C2。
func Dome() {
	//需要加密的參數(shù)
	dataArray := []interface{}{"object1", "object2"}
	//序列化為JSON字符串
	dataBytes, _ := json.Marshal(dataArray)

	// 假設(shè)這是你的SM2公鑰的十六進(jìn)制字符串表示
	publicKeyHex := ""
	
	//DecodeString返回由十六進(jìn)制字符串s表示的字節(jié)
	keypoints, _ := hex.DecodeString(publicKeyHex)

	//檢查是否有效并返回PublicKey
	testkey, err := sm2.NewPublicKey(keypoints)
	if err != nil {
		fmt.Printf("fail to new public key %v \n", err)
	}

	//兩種加密方式
	//ciphertext, err := sm2.EncryptASN1(rand.Reader, testkey, dataBytes)
	ciphertext, err := sm2.Encrypt(rand.Reader, testkey, dataBytes, nil)
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error from encryption: %s\n", err)
		return
	}
	fmt.Printf("Ciphertext: %x \n", ciphertext)
}

實(shí)例:Sm2解密Dome

  • 這個(gè)SM2私鑰的解密方法Decrypt,通常情況下,對(duì)crypto.DecrypterOpts類(lèi)型參數(shù),您只需傳入nil,系統(tǒng)會(huì)自己檢測(cè)輸入密文是ASN.1還是普通拼接,但是,如果密文是老舊的C1||C2||C3拼接,請(qǐng)傳入相應(yīng)的crypto.DecrypterOpts類(lèi)型參數(shù),或者您可以先通過(guò)上面介紹的輔助函數(shù)轉(zhuǎn)換一下。
func Dome() {
	//私鑰
	privateKey := ``
	
	//解密
	ciphertext, _ := hex.DecodeString(`加密出來(lái)字符串`)
	
	privKey, _ := hex.DecodeString(privateKey)
	
	testkey, err := sm2.NewPrivateKey(privKey)
	if err != nil {
		fmt.Printf("fail to new private key %v \n", err)
	}

	plaintext, err := testkey.Decrypt(nil, ciphertext, nil)
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error1 from decryption: %s \n", err)
		return
	}
	fmt.Printf("Plaintext: %s \n", string(plaintext))
}

總結(jié):用已經(jīng)生成的公鑰、密鑰和第三方庫(kù)可以解決Golang語(yǔ)言的國(guó)密加解密問(wèn)題。

到此這篇關(guān)于使用Golang實(shí)現(xiàn)Sm2加解密的代碼詳解的文章就介紹到這了,更多相關(guān)Golang SM2加解密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入探究Golang中flag標(biāo)準(zhǔn)庫(kù)的使用

    深入探究Golang中flag標(biāo)準(zhǔn)庫(kù)的使用

    在本文中,我們將深入探討 flag 標(biāo)準(zhǔn)庫(kù)的實(shí)現(xiàn)原理和使用技巧,以幫助讀者更好地理解和掌握該庫(kù)的使用方法,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2023-04-04
  • GoLang string與strings.Builder使用對(duì)比詳解

    GoLang string與strings.Builder使用對(duì)比詳解

    這篇文章主要介紹了GoLang string與strings.Builder使用對(duì)比,Builder 用于使用 Write 方法有效地構(gòu)建字符串。它最大限度地減少了內(nèi)存復(fù)制。零值可以使用了。不要復(fù)制非零生成器
    2023-03-03
  • Golang正則表達(dá)式判斷手機(jī)號(hào)或身份證方法實(shí)例

    Golang正則表達(dá)式判斷手機(jī)號(hào)或身份證方法實(shí)例

    日常使用一些軟件時(shí)會(huì)通過(guò)手機(jī)號(hào)碼來(lái)注冊(cè),這就會(huì)用到正則表達(dá)式來(lái)判斷號(hào)碼是否正確,下面這篇文章主要給大家介紹了關(guān)于Golang正則表達(dá)式判斷手機(jī)號(hào)或身份證的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Go語(yǔ)言利用heap實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列

    Go語(yǔ)言利用heap實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中heap的使用以及如何利用heap實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列的相關(guān)資料,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05
  • 談?wù)刧olang的netpoll原理解析

    談?wù)刧olang的netpoll原理解析

    本文詳細(xì)介紹了Go語(yǔ)言中netpoll部分的實(shí)現(xiàn)細(xì)節(jié)和協(xié)程阻塞調(diào)度原理,特別是epoll在Linux環(huán)境下的工作原理,Go語(yǔ)言通過(guò)將epoll操作放在runtime包中,結(jié)合運(yùn)行時(shí)調(diào)度功能,實(shí)現(xiàn)了高效的協(xié)程I/O操作,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Go并發(fā)編程結(jié)構(gòu)體多字段原子操作示例詳解

    Go并發(fā)編程結(jié)構(gòu)體多字段原子操作示例詳解

    這篇文章主要為大家介紹了Go并發(fā)編程結(jié)構(gòu)體多字段原子操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 解讀unsafe.Pointer和uintptr的區(qū)別

    解讀unsafe.Pointer和uintptr的區(qū)別

    這篇文章主要介紹了解讀unsafe.Pointer和uintptr的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Nunu快速構(gòu)建高效可靠Go應(yīng)用腳手架使用詳解

    Nunu快速構(gòu)建高效可靠Go應(yīng)用腳手架使用詳解

    這篇文章主要為大家介紹了如何使用Nunu快速構(gòu)建高效可靠Go應(yīng)用腳手架詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 詳解Go語(yǔ)言中切片的長(zhǎng)度與容量的區(qū)別

    詳解Go語(yǔ)言中切片的長(zhǎng)度與容量的區(qū)別

    切片可以看成是數(shù)組的引用,切片的長(zhǎng)度是它所包含的元素個(gè)數(shù)。切片的容量是從它的第一個(gè)元素到其底層數(shù)組元素末尾的個(gè)數(shù)。本文將通過(guò)示例詳細(xì)講講Go語(yǔ)言中切片的長(zhǎng)度與容量的區(qū)別,需要的可以參考一下
    2022-11-11
  • Go語(yǔ)句與表達(dá)式案例手冊(cè)深度解析

    Go語(yǔ)句與表達(dá)式案例手冊(cè)深度解析

    這篇文章主要為大家介紹了Go語(yǔ)句與表達(dá)式案例手冊(cè)深度解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論