/// <summary> /// 加密CBC模式 /// </summary> /// <param name="secretKey">密钥</param> /// <param name="hexString">明文是否是十六进制</param> /// <param name="iv"></param> /// <param name="plainText">明文</param> /// <returns>返回密文</returns> public String Encrypt_CBC(String secretKey, bool hexString, string iv, String plainText) { Sm4Context ctx = new Sm4Context(); ctx.isPadding = true; ctx.mode = Sm4.SM4_ENCRYPT; byte[] keyBytes; byte[] ivBytes; if (hexString) { keyBytes = Hex.Decode(secretKey); ivBytes = Hex.Decode(iv); } else { keyBytes = Encoding.Default.GetBytes(secretKey); ivBytes = Encoding.Default.GetBytes(iv); } Sm4 sm4 = new Sm4(); sm4.sm4_setkey_enc(ctx, keyBytes); byte[] encrypted = sm4.sm4_crypt_cbc(ctx, ivBytes, Encoding.Default.GetBytes(plainText)); String cipherText = Encoding.Default.GetString(Hex.Encode(encrypted)); return(cipherText); }
/// <summary> /// 解密ECB模式 /// </summary> /// <param name="secretKey">密钥</param> /// <param name="hexString">明文是否是十六进制</param> /// <param name="cipherText">密文</param> /// <returns>返回明文</returns> public String Decrypt_ECB(String secretKey, bool hexString, String cipherText) { Sm4Context ctx = new Sm4Context(); ctx.isPadding = true; ctx.mode = Sm4.SM4_DECRYPT; byte[] keyBytes; if (hexString) { keyBytes = Hex.Decode(secretKey); } else { keyBytes = Encoding.UTF8.GetBytes(secretKey); } Sm4 sm4 = new Sm4(); sm4.sm4_setkey_dec(ctx, keyBytes); byte[] decrypted = sm4.sm4_crypt_ecb(ctx, Hex.Decode(cipherText)); return(Encoding.UTF8.GetString(decrypted)); }