using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class SM4Encryption
{
    // 密钥和初始向量(IV),需要根据实际情况设置
    private static readonly byte[] key = Encoding.UTF8.GetBytes("0123456789abcdef"); // 16字节密钥
    private static readonly byte[] iv = Encoding.UTF8.GetBytes("fedcba9876543210");   // 16字节IV
    public static string Encrypt(string plainText)
    {
        using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
        {
            aesAlg.Key = key;
            aesAlg.IV = iv;
            aesAlg.Mode = CipherMode.CBC;
            aesAlg.Padding = PaddingMode.PKCS7;
            ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
            using (MemoryStream msEncrypt = new MemoryStream())
            {
                using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                    {
                        swEncrypt.Write(plainText);
                    }
                    return Convert.ToBase64String(msEncrypt.ToArray());
                }
            }
        }
    }
    public static string Decrypt(string cipherText)
    {
        using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
        {
            aesAlg.Key = key;
            aesAlg.IV = iv;
            aesAlg.Mode = CipherMode.CBC;
            aesAlg.Padding = PaddingMode.PKCS7;
            ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
            using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(cipherText)))
            {
                using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                    {
                        return srDecrypt.ReadToEnd();
                    }
                }
            }
        }
    }
}
// 示例用法
class Program
{
    static void Main()
    {
        string original = "Hello World!";
        Console.WriteLine("Original: " + original);
        string encrypted = SM4Encryption.Encrypt(original);
        Console.WriteLine("Encrypted: " + encrypted);
        string decrypted = SM4Encryption.Decrypt(encrypted);
        Console.WriteLine("Decrypted: " + decrypted);
    }
}key 和 iv 是用于加密和解密的密钥和初始向量,必须是16字节长。你需要根据实际情况设置这些值。Encrypt 和 Decrypt 方法进行加密和解密操作。请注意,C# 中没有直接支持 SM4 加密的内置类库,上述代码使用的是 AES 算法作为替代。如果你需要使用 SM4 算法,请确保你有合适的第三方库或实现。
上一篇:c# 字符串转int
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站