1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/china_uni-tjfoc-gm

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
API使用说明.md 5.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 07:19 c2636c5

Использование API Go от Государственного управления шифрования КНР (国密GM/T Go API使用说明)

Установка пакета Go

go get -u github.com/Hyperledger-TWGC/tjfoc-gm

SM3 алгоритм хеширования — SM3 cryptographic hash algorithm

  • Соответствует стандарту GM/T 0004-2012.
  • Пакет Go: github.com/Hyperledger-TWGC/tjfoc-gm/sm3.
  • Тип SM3 struct является реализацией интерфейса hash.Hash.

Пример кода

    data := "test"
    h := sm3.New()
    h.Write([]byte(data))
    sum := h.Sum(nil)
    fmt.Printf("digest value is: %x\n",sum)

Алгоритм блочного шифрования SM4 — SM4 block cipher algorithm

  • Соответствует стандарту GM/T 0002-2012.
  • Пакет Go: github.com/Hyperledger-TWGC/tjfoc-gm/sm4.

Пример кода

    import  "crypto/cipher"
    import  "github.com/Hyperledger-TWGC/tjfoc-gm/sm4"

    func main(){
        // 128-битный ключ
        key := []byte("1234567890abcdef")
        // 128-битная iv
        iv := make([]byte, sm4.BlockSize)
        data := []byte("Tongji Fintech Research Institute")
        ciphertxt,err := sm4Encrypt(key,iv, data)
        if err != nil{
            log.Fatal(err)
        }
        fmt.Printf("加密结果: %x\n", ciphertxt)
    }

    func sm4Encrypt(key, iv, plainText []byte) ([]byte, error) {
        block, err := sm4.NewCipher(key)
        if err != nil {
            return nil, err
        }
        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) {
        block, err := sm4.NewCipher(key)
    	if err != nil {
        	return nil, err
    	}
    	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 := blockSize - len(src)%blockSize
    	padtext := bytes.Repeat([]byte{byte(padding)}, padding)
    	return append(src, padtext...)
    }

    func pkcs5UnPadding(src []byte) []byte {
        length := len(src)
        if(length==0){
            return nil
        }
    	unpadding := int(src[length-1])
    	return src[:(length - unpadding)]
    }

Список методов

NewCipher

Создаёт модель алгоритма SM4 блочного шифрования, длина ключа должна быть 128 бит.

func NewCipher(key []byte) (cipher.Block, error)

Схемы цифровой подписи SM2 на основе эллиптических кривых — Public key cryptographic algorithm SM2 based on elliptic curves

  • Соответствующие стандарты: 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.
  • Пакет Go: github.com/Hyperledger-TWGC/tjfoc-gm/sm2.

Пример кода

    priv, err := sm2.GenerateKey() // 生成密钥对
    if err != nil {
    	log.Fatal(err)
    }
    msg := []byte("Tongji Fintech Research Institute")
    pub := &priv.PublicKey
    ciphertxt, err := pub.Encrypt(msg)
    if err != nil {
    	log.Fatal(err)
    }
    fmt.Printf("加密结果:%x\n",ciphertxt)
    plaintxt,err :=  priv.Decrypt(ciphertxt)
    if err != nil {
    	log.Fatal(err)
    }
    if !bytes.Equal(msg,plaintxt){
        log.Fatal("原文不匹配")
    }

    r,s,err := sm2.Sign(priv, msg)
    if err != nil {
    	log.Fatal(err)
    }
    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)

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/china_uni-tjfoc-gm.git
git@api.gitlife.ru:oschina-mirror/china_uni-tjfoc-gm.git
oschina-mirror
china_uni-tjfoc-gm
china_uni-tjfoc-gm
fabric.2.x