/// <summary>
        /// Encrypt data by SM4-CBC
        /// </summary>
        /// <param name="data"></param>
        /// <param name="key"></param>
        /// <param name="iv"></param>
        /// <returns></returns>
        public static byte[] Encrypt(byte[] data, byte[] key, byte[] iv)
        {
            var ctx = new SM4Context {
                IsPadding = true, Mode = SM4Core.SM4_ENCRYPT
            };
            var sm4 = new SM4Core();

            sm4.sm4_setkey_enc(ctx, key);
            return(sm4.sm4_crypt_cbc(ctx, iv, data));
        }
        /// <summary>
        /// Decrypt data by SM4-ECB
        /// </summary>
        /// <param name="data"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static byte[] Decrypt(byte[] data, byte[] key)
        {
            var ctx = new SM4Context {
                IsPadding = true, Mode = SM4Core.SM4_DECRYPT
            };
            var sm4 = new SM4Core();

            sm4.sm4_setkey_dec(ctx, key);
            return(sm4.sm4_crypt_ecb(ctx, data));
        }