go語言國密演算法測試API

2021-10-18 03:04:13 字數 2910 閱讀 3566

go get -u github.com/tjfoc/gmsm
遵循的sm3標準號為: gm/t 0004-2012

匯入包

import github.com/tjfoc/gmsm/sm3
data := "test"

h := sm3.new()

h.write(byte(data))

sum := h.sum(nil)

fmt.printf("digest value is: %x\n",sum)

new

建立雜湊計算例項

func new() hash.hash
sum

返回sm3雜湊演算法摘要值

func sum() byte
遵循的sm4標準號為: gm/t 0002-2012

匯入包

import github.com/tjfoc/gmsm/sm4
import  "crypto/cipher"

fmt.printf("加密結果: %x\n", ciphertxt)

}func sm4encrypt(key, iv, plaintext byte) (byte, error)

blocksize := block.blocksize()

origdata := pkcs5padding(plaintext, blocksize)

blockmode := cipher.newcbcencrypter(block, iv)

cryted := make(byte, len(origdata))

blockmode.cryptblocks(cryted, origdata)

return cryted, nil

}func sm4decrypt(key, iv, ciphertext byte) (byte, error)

blockmode := cipher.newcbcdecrypter(block, iv)

origdata := make(byte, len(ciphertext))

blockmode.cryptblocks(origdata, ciphertext)

origdata = pkcs5unpadding(origdata)

return origdata, nil

}// pkcs5填充

func pkcs5padding(src byte, blocksize int) byte , padding)

}func pkcs5unpadding(src byte) byte

newcipher

建立sm4密碼分組演算法模型,引數key長度只支援128位元。

func newcipher(key byte) (cipher.block, error)
遵循的sm2標準號為: gm/t 0003.1-2012、gm/t 0003.2-2012、gm/t 0003.3-2012、gm/t 0003.4-2012、gm/t 0003.5-2012、gm/t 0009-2012、gm/t 0010-2012

匯入包

import github.com/tjfoc/gmsm/sm2
priv, err := sm2.generatekey() // 生成金鑰對

if err != nil

msg := byte("tongji fintech research institute")

pub := &priv.publickey

ciphertxt, err := pub.encrypt(msg)

if err != nil

fmt.printf("加密結果:%x\n",ciphertxt)

plaintxt,err := priv.decrypt(ciphertxt)

if err != nil

if !bytes.equal(msg,plaintxt)

r,s,err := sm2.sign(priv, msg)

if err != nil

isok := sm2.verify(pub,msg,r,s)

fmt.printf("verified: %v\n", isok)

generatekey

生成隨機秘鑰。

func generatekey() (*privatekey, error)
sign

用私鑰簽名資料,成功返回以兩個大數表示的簽名結果,否則返回錯誤。

func sign(priv *privatekey, hash byte) (r, s *big.int, err error)
verify

用公鑰驗證資料簽名, 驗證成功返回true,否則返回false。

func verify(pub *publickey, hash byte, r, s *big.int) bool
encrypt

用公鑰加密資料,成功返回密文錯誤,否則返回錯誤。

func encrypt(pub *publickey, data byte) (byte, error)
decrypt

用私鑰解密資料,成功返回原始明文資料,否則返回錯誤。

func decrypt(priv *privatekey, data byte) (byte, error)

國密演算法(二)

接上文 sm4對稱演算法是乙個分組演算法,用於無線區域網產品。該演算法的分組長度為128位元,金鑰長度為128位元。加密演算法與金鑰擴充套件演算法都採用32輪非線性迭代結構。解密演算法與加密演算法的結構相同,只是輪金鑰的使用順序相反,解密輪金鑰是加密輪金鑰的逆序。此演算法採用非線性迭代結構,每次迭代...

國密演算法(三)

接上文 為了降低公開金鑰系統中金鑰和證書管理的複雜性,以色列科學家 rsa演算法發明人之一adi shamir在1984年提出了標識密碼 identity based cryptography 的理念。標識密碼將使用者的標識 如郵件位址 手機號碼 qq號碼等 作為公鑰,省略了交換數字證書和公鑰過程,...

國密演算法介紹以及Fabric國密擴充套件

國密即國家密碼局認定的國產密碼演算法。主要有sm1,sm2,sm3,sm4。金鑰長度和分組長度均為128位。sm1 為對稱加密。其加密強度與aes相當。該演算法不公開,呼叫該演算法時,需要通過加密晶元的介面進行呼叫。採用該演算法已經研製了系列晶元 智慧型ic卡 智慧型密碼鑰匙 加密卡 加密機等安全產...