emmansun / gmsm

ShangMi (SM) cipher suites for golang (Go语言商用密码软件)

Home Page:https://emmansun.github.io/gmsm

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

result of ECB decryption is incomplete

mango19970707 opened this issue · comments

Big old, I'm having a problem. Please help me. The plaintext decrypted by this ciphertext is incomplete, and the ECB decryption using "github.com/tjfoc/gmsm/sm4" is correct, is this because there is a problem with the way I use it?

	key, err := base64.StdEncoding.DecodeString("JdzCgHWkGFCMt886kiu0UA==")
	if err != nil {
		panic(err)
	}
	ciphertext, err := hex.DecodeString("b40866818b1fe534cbf4994ed8c8b53643e6360f403cf7f45d4b8103e765b6a08f36dba754bc0d7bb51b19c671d24cc0c428d8117f4134fea5628cb444f8a1497b2475669d35845354cfd1acc6dade16")
	if err != nil {
		panic(err)
	}
	c, err := sm4.NewCipher(key)
	if err != nil {
		panic(err)
	}

	plaintext := make([]byte, len(ciphertext))
	decrypter := ecb_c.NewECBDecrypter(c)
	decrypter.CryptBlocks(plaintext, ciphertext)
	fmt.Println("res: ", string(plaintext))
	fmt.Println("wanted: {\"success\":false,\"code\":\"900001\",\"msg\":\"行政区划代码不可为空\"}")

ecb_c "github.com/emmansun/gmsm/cipher"

This should be padding issue, please refer document or example code for how to un-pad the decrypted result. #195

	key, err := base64.StdEncoding.DecodeString("JdzCgHWkGFCMt886kiu0UA==")
	if err != nil {
		panic(err)
	}
	ciphertext, err := hex.DecodeString("b40866818b1fe534cbf4994ed8c8b53643e6360f403cf7f45d4b8103e765b6a08f36dba754bc0d7bb51b19c671d24cc0c428d8117f4134fea5628cb444f8a1497b2475669d35845354cfd1acc6dade16")
	if err != nil {
		panic(err)
	}
	c, err := sm4.NewCipher(key)
	if err != nil {
		panic(err)
	}
        pkcs7 := padding.NewPKCS7Padding(sm4.BlockSize)
	plaintext := make([]byte, len(ciphertext))
	decrypter := ecb_c.NewECBDecrypter(c)
	decrypter.CryptBlocks(plaintext, ciphertext)
	plaintext, err = pkcs7.Unpad(plaintext)
	if err != nil {
		panic(err)
	}
	fmt.Println("res: ", string(plaintext))
	fmt.Println("wanted: {\"success\":false,\"code\":\"900001\",\"msg\":\"行政区划代码不可为空\"}")

It works. Thank you so much. The help is just too great.

Thank you very much.