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.