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卡 智慧型密碼鑰匙 加密卡 加密機等安全產...