Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# sm4加密

作者:呐爱淡了   发布日期:2025-06-28   浏览:32

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);
    }
}

解释说明:

  1. SM4Encryption 类:包含加密和解密方法。
  2. 密钥和IVkeyiv 是用于加密和解密的密钥和初始向量,必须是16字节长。你需要根据实际情况设置这些值。
  3. Encrypt 方法:将明文字符串加密为 Base64 编码的字符串。
  4. Decrypt 方法:将 Base64 编码的密文字符串解密为原始字符串。
  5. 示例用法:展示了如何使用 EncryptDecrypt 方法进行加密和解密操作。

请注意,C# 中没有直接支持 SM4 加密的内置类库,上述代码使用的是 AES 算法作为替代。如果你需要使用 SM4 算法,请确保你有合适的第三方库或实现。

上一篇:c# 字符串转int

下一篇:c# string 转datetime

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

.net和c#

c#游戏开发

c#网络编程

c# rectangle

c# if else

c#高并发

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站