EasilyNET.Security 4.25.526.140

dotnet add package EasilyNET.Security --version 4.25.526.140
                    
NuGet\Install-Package EasilyNET.Security -Version 4.25.526.140
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EasilyNET.Security" Version="4.25.526.140" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EasilyNET.Security" Version="4.25.526.140" />
                    
Directory.Packages.props
<PackageReference Include="EasilyNET.Security" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EasilyNET.Security --version 4.25.526.140
                    
#r "nuget: EasilyNET.Security, 4.25.526.140"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=EasilyNET.Security&version=4.25.526.140
                    
Install EasilyNET.Security as a Cake Addin
#tool nuget:?package=EasilyNET.Security&version=4.25.526.140
                    
Install EasilyNET.Security as a Cake Tool
EasilyNET.Security

一个.Net 中常用的加密算法的封装.降低加密解密的使用复杂度.

  • 目前有的算法:AES,DES,RC4,TripleDES,RSA,SM2,SM3,SM4

  • 支持 RSA XML 结构的 SecurityKey 和 Base64 格式的互转.

  • 本库不是去实现加密算法,而是基于.Net 提供的接口封装,为了方便使用

  • 未经测试的预测,若是遇到了解密乱码,可能是需要引入一个包.

  • 在主项目中添加 System.Text.Encoding.CodePages 库,并在程序入口处添加注册代码. Programe.cs

var builder = WebApplication.CreateBuilder(args);

System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
RC4
/// <summary>
/// RC4
/// </summary>
public void Rc4()
{
    const string data = "Microsoft";
    var key = "123456"u8.ToArray();
    var byte_data = Encoding.UTF8.GetBytes(data);
    var secret = Rc4Crypt.Encrypt(byte_data, key);
    var base64 = secret.ToBase64();
    // TZEdFUtAevoL
    var data_result = Rc4Crypt.Decrypt(secret, key);
    var result = Encoding.UTF8.GetString(data_result);
    // result == data
}
RSA
private const string PublicKey =
    "<RSAKeyValue><Modulus>p0H+4fFMZFIQq6LAhXNf3Zml3imiOCU6mzMiMcqRu/x5x08X3pWF6m+v+1T7fOo4P/2GYluZiuQzKveJnRLxV0O6kRdVivApZ6C/Lb8vnsnocaSlmEOoswdOZvmhe3s4tAQ4KlZerWdRYx3dUgoH862IUv6FNiSyF/z3TP4M50E=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";

private const string PrivateKey =
    "<RSAKeyValue><Modulus>p0H+4fFMZFIQq6LAhXNf3Zml3imiOCU6mzMiMcqRu/x5x08X3pWF6m+v+1T7fOo4P/2GYluZiuQzKveJnRLxV0O6kRdVivApZ6C/Lb8vnsnocaSlmEOoswdOZvmhe3s4tAQ4KlZerWdRYx3dUgoH862IUv6FNiSyF/z3TP4M50E=</Modulus><Exponent>AQAB</Exponent><P>2Nhp0/mM3qRkTqzUe5DeI5r5hmDS24XYsSteHKLNuD66sa0K1EFprTstw96+ZJdXW/bJ+R58j78YP1frkLFVpw==</P><Q>xXVq4nyP7UppDXXyKTjWindWmMTuD0v9el6EnyWiqaoaGRF6IAL1nKOcrh5O/BiFgBZm5cTn0knUNE8BzaFI1w==</Q><DP>T4ur3qe3pmC1ryq1U5LD+lm6WTIhh4flArD++BA82O6h+9WXmF9ajcKcujJ2s13VHRY95xXo6a5XDb2J221CFw==</DP><DQ>JpxaJSV0Q1MsjZxFmPfrQ7IoNcE0R7t1OktnJXOHhiOj7Mj1F3NcsZ9wkL+OdE8bM7utrTo+lmknXH8ifCIQiw==</DQ><InverseQ>VvMW94/iyBgKNH8N1Xdikn17BLC0a8tYsm/H/VDMXjaVngAXGqeN370Hd1Zukj0EGVw/vEl2YsAoJ6o9KmQgNA==</InverseQ><D>CkO8lrUuUQHQUBg+5HG+MmVZjpbTg8qVHC05LgEWjIjkGF08Q8a9XzPXgv8mJ/Zf2V1/v82LUMDMexiR83fUI8NxNuZjD+ldR1ZqmtE96+4laA0/WUH0fb1nBA6foVS+WB643nN01dJs0/3IV65k35GfkuqKDct6gld8/UFaN1k=</D></RSAKeyValue>";

private static readonly RsaSecretKey key = new(PrivateKey, PublicKey);

/// <summary>
/// 转换Key,Base64和XML格式互转. Java和其他语言里一般使用base64格式,.Net中一般为XML格式
/// </summary>
public void XmlToBase64Key()
{
    // 私钥转换为Base64格式
    var pri = RsaKeyConverter.ToBase64PrivateKey(PrivateKey);
    // MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKdB/uHxTGRSEKuiwIVzX92Zpd4pojglOpszIjHKkbv8ecdPF96Vhepvr/tU+3zqOD/9hmJbmYrkMyr3iZ0S8VdDupEXVYrwKWegvy2/L57J6HGkpZhDqLMHTmb5oXt7OLQEOCpWXq1nUWMd3VIKB/OtiFL+hTYkshf890z+DOdBAgMBAAECgYAKQ7yWtS5RAdBQGD7kcb4yZVmOltODypUcLTkuARaMiOQYXTxDxr1fM9eC/yYn9l/ZXX+/zYtQwMx7GJHzd9Qjw3E25mMP6V1HVmqa0T3r7iVoDT9ZQfR9vWcEDp+hVL5YHrjec3TV0mzT/chXrmTfkZ+S6ooNy3qCV3z9QVo3WQJBANjYadP5jN6kZE6s1HuQ3iOa+YZg0tuF2LErXhyizbg+urGtCtRBaa07LcPevmSXV1v2yfkefI+/GD9X65CxVacCQQDFdWrifI/tSmkNdfIpONaKd1aYxO4PS/16XoSfJaKpqhoZEXogAvWco5yuHk78GIWAFmblxOfSSdQ0TwHNoUjXAkBPi6vep7emYLWvKrVTksP6WbpZMiGHh+UCsP74EDzY7qH71ZeYX1qNwpy6MnazXdUdFj3nFejprlcNvYnbbUIXAkAmnFolJXRDUyyNnEWY9+tDsig1wTRHu3U6S2clc4eGI6PsyPUXc1yxn3CQv450Txszu62tOj6WaSdcfyJ8IhCLAkBW8xb3j+LIGAo0fw3Vd2KSfXsEsLRry1iyb8f9UMxeNpWeABcap43fvQd3Vm6SPQQZXD+8SXZiwCgnqj0qZCA0

    // 公钥转换为Base64格式
    var pub = RsaKeyConverter.ToBase64PublicKey(PublicKey);
    // MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnQf7h8UxkUhCrosCFc1/dmaXeKaI4JTqbMyIxypG7/HnHTxfelYXqb6/7VPt86jg//YZiW5mK5DMq94mdEvFXQ7qRF1WK8ClnoL8tvy+eyehxpKWYQ6izB05m+aF7ezi0BDgqVl6tZ1FjHd1SCgfzrYhS/oU2JLIX/PdM/gznQQIDAQAB

    // 一样可以将Base64格式转换为XML格式
    var xml_pri = RsaKeyConverter.ToXmlPrivateKey(pri);
    // xml_pri == PrivateKey
    var xml_pub = RsaKeyConverter.ToXmlPublicKey(pub);
    // xml_pub == PublicKey
}

/// <summary>
/// RSA加密解密测试
/// </summary>
public void RsaEncryptAndDecrypt()
{
    const string data = "Microsoft";
    // 将原文解析到二进制数组格式
    var byte_data = Encoding.UTF8.GetBytes(data);
    RsaCrypt.Encrypt(key.PublicKey, byte_data, out var secret_data);
    var secret_str = secret_data.ToBase64();
    Console.WriteLine(secret_str);
    RsaCrypt.Decrypt(key.PrivateKey, secret_str.FromBase64(), out var data_byte);
    var result = Encoding.UTF8.GetString(data_byte);
    // result == data
}
SM3
 private const string data = "Microsoft";

/// <summary>
/// SM3测试16进制字符串格式
/// </summary>
public void SM3HexString()
{
    var byte_data = Sm3Crypt.Crypt(data);
    var hex = byte_data.ToHex();
    hex.ToUpper().Should().Be("1749CE3E4EF7622F1EBABB52078EC86309CABD5A6073C8A0711BF35E19BA51B8");
}

/// <summary>
/// SM3测试Base64字符串格式
/// </summary>
public void SM3Base64()
{
    var byte_data = Sm3Crypt.Crypt(data);
    var base64 = byte_data.ToBase64();
    base64.ToUpper().Should().Be("F0NOPK73YI8EURTSB47IYWNKVVPGC8IGCRVZXHM6UBG=");
}
SM4
/// <summary>
/// SM4ECB模式加密到Base64格式
/// </summary>
public void Sm4EncryptECBToBase64()
{
    const string data = "Microsoft";
    // 将原文解析到二进制数组格式
    var byte_data = Encoding.UTF8.GetBytes(data);
    // 进制格式密钥加密数据
    var result = Sm4Crypt.EncryptECB("701d1cc0cfbe7ee11824df718855c0c6", true, byte_data);
    // 获取Base64格式的字符串结果
    var base64 = result.ToBase64();
    // ThRruxZZm1GrHE5KkP4UmQ==
}

/// <summary>
/// SM4ECB模式解密Base64格式到字符串
/// </summary>
public void Sm4DecryptECBTest()
{
    // Base64格式的
    const string data = "ThRruxZZm1GrHE5KkP4UmQ==";
    // 将Base64格式字符串转为 byte[]
    var byte_data = Convert.FromBase64String(data);
    // 通过16进制格式密钥解密数据
    var result = Sm4Crypt.DecryptECB("701d1cc0cfbe7ee11824df718855c0c6", true, byte_data);
    // 解析结果获取字符串
    var str = Encoding.UTF8.GetString(result);
    // Microsoft
}

/// <summary>
/// SM4ECB模式加密到16进制字符串
/// </summary>
public void Sm4EncryptECBToHex16()
{
    const string data = "Microsoft";
    // 将原文解析到二进制数组格式
    var byte_data = Encoding.UTF8.GetBytes(data);
    // 使用16位长度的密钥加密
    var result = Sm4Crypt.EncryptECB("1cc0cfbe7ee11824", false, byte_data);
    // 将结果转为16进制字符串
    var hex = result.ToHexString();
    // D265DF0510C05FE836D3113B3ACEC714
}

/// <summary>
/// SM4ECB模式解密16进制字符串格式密文
/// </summary>
public void Sm4DecryptECBTest2()
{
    const string data = "D265DF0510C05FE836D3113B3ACEC714";
    var byte_data = data.FromHex();
    var result = Sm4Crypt.DecryptECB("1cc0cfbe7ee11824", false, byte_data);
    // 解析结果获取字符串
    var str = Encoding.UTF8.GetString(result);
    // Microsoft
}

/// <summary>
/// SM4CBC模式加密到Base64格式
/// </summary>
public void Sm4EncryptCBCTest()
{
    const string data = "Microsoft";
    var byte_data = Encoding.UTF8.GetBytes(data);
    var result = Sm4Crypt.EncryptCBC("701d1cc0cfbe7ee11824df718855c0c6", true, "701d1cc0cfbe7ee11824df718855c0c5", byte_data);
    var base64 = result.ToBase64();
    // Q2iUaMuSHjLvq6GhUQnGTg==
}

/// <summary>
/// SM4CBC模式从Base64解密
/// </summary>
public void Sm4DecryptCBCTest()
{
    const string data = "Q2iUaMuSHjLvq6GhUQnGTg==";
    var byte_data = Convert.FromBase64String(data);
    var result = Sm4Crypt.DecryptCBC("701d1cc0cfbe7ee11824df718855c0c6", true, "701d1cc0cfbe7ee11824df718855c0c5", byte_data);
    var str = Encoding.UTF8.GetString(result);
    // Microsoft
}

/// <summary>
/// SM4CBC模式加密到16进制字符串
/// </summary>
public void Sm4EncryptCBCTest2()
{
    const string data = "Microsoft";
    var byte_data = Encoding.UTF8.GetBytes(data);
    var result = Sm4Crypt.EncryptCBC("1cc0cfbe7ee11824", false, "1cc0cfbe7ee12824", byte_data);
    var hex = result.ToHexString();
    // 1BD7A32E49B60B17698AAC9D1E4FEE4A
}

/// <summary>
/// SM4CBC模式从Hex16解密到字符串
/// </summary>
public void Sm4DecryptCBCTest2()
{
    const string data = "1BD7A32E49B60B17698AAC9D1E4FEE4A";
    var byte_data = data.FromHex();
    var result = Sm4Crypt.DecryptCBC("1cc0cfbe7ee11824", false, "1cc0cfbe7ee12824", byte_data);
    var str = Encoding.UTF8.GetString(result);
    // Microsoft
}
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.25.526.140 133 5/26/2025
4.25.513.101 214 5/13/2025
4.25.506.150 120 5/6/2025
4.25.429.162 130 4/29/2025
4.25.429.103 147 4/29/2025
4.25.411.142 114 4/11/2025
4.25.409.92 130 4/9/2025
4.25.403.133 140 4/3/2025
4.25.319.113 156 3/19/2025
4.25.312.103 174 3/12/2025
4.25.227.135 114 2/27/2025
4.25.221.115 112 2/21/2025
4.25.212.95 110 2/12/2025
4.25.211.140 101 2/11/2025
4.25.124.223 93 1/24/2025
4.25.116.110 107 1/16/2025
4.25.115.121 66 1/15/2025
4.25.114.172 98 1/14/2025
4.25.109.111 104 1/9/2025
4.25.108.182 97 1/8/2025
4.25.108.160 91 1/8/2025
4.25.1.1 123 1/1/2025
3.24.1224.141 115 12/24/2024
3.24.1216.116 131 12/16/2024
3.24.1206.100 136 12/6/2024
3.24.1205.171 121 12/5/2024
3.24.1202.150 113 12/2/2024
3.24.1126.231 92 11/26/2024
3.24.1126.172 80 11/26/2024
3.24.1126.114 83 11/26/2024
3.24.1126.104 73 11/26/2024
3.24.1125.181 64 11/25/2024
3.24.1125.104 81 11/25/2024
3.24.1121.183 71 11/21/2024
3.24.1120.183 77 11/20/2024
3.24.1119.31 89 11/18/2024
3.24.1115.143 85 11/15/2024
3.24.1113.100 105 11/13/2024
3.24.1112.125 84 11/12/2024
3.24.1107.140 95 11/7/2024
3.24.1107.54 71 11/7/2024
3.24.1107.34 74 11/7/2024
3.24.1105.111 79 11/5/2024
3.24.1103.31 97 11/2/2024
3.24.1103 84 11/2/2024
3.24.1031.135 80 10/31/2024
3.24.1031.112 77 10/31/2024
3.24.1031.104 72 10/31/2024
3.24.1029.142 111 10/29/2024
3.24.1025.30 76 10/24/2024
3.24.1022.142 70 10/22/2024
3.24.1018.204 156 10/18/2024
3.24.1018.175 125 10/18/2024
3.24.1018.166 119 10/18/2024
3.24.1018.93 127 10/18/2024
3.24.1017.42 77 10/16/2024
3.24.1016.161 83 10/16/2024
3.24.1015.231 77 10/15/2024
3.24.1015.14 80 10/14/2024
3.24.1012.114 80 10/12/2024
3.24.1009.115 87 10/9/2024
3.24.1008.160 73 10/8/2024
3.24.1008.133 76 10/8/2024
3.24.1007.185 78 10/7/2024
3.24.1003.33 83 10/2/2024
3.24.1002.162 87 10/2/2024
3.24.929.143 84 9/29/2024
3.24.929.141 75 9/29/2024
3.24.929.131 75 9/29/2024
3.24.929.122 82 9/29/2024
3.24.926.184 88 9/26/2024
3.24.926.182 79 9/26/2024
3.24.926.175 85 9/26/2024
3.24.924.160 88 9/24/2024
3.24.924.133 88 9/24/2024
3.24.924.124 75 9/24/2024
3.24.924.10 86 9/23/2024
3.24.924.1 88 9/23/2024
3.24.923.234 77 9/23/2024
3.24.923.232 79 9/23/2024
3.24.923.155 80 9/23/2024
3.24.919.92 97 9/19/2024
3.24.914.125 104 9/14/2024
3.24.914.115 82 9/14/2024
3.24.914.111 84 9/14/2024
3.24.911.95 134 9/11/2024
3.24.908.215 139 9/8/2024
3.24.904.200 143 9/4/2024
3.24.828.163 133 8/28/2024
3.24.820.173 137 8/20/2024
3.24.814.92 131 8/14/2024
3.24.812.115 147 8/12/2024
3.24.802.100 105 8/2/2024
3.24.801.162 117 8/1/2024
3.24.801.160 130 8/1/2024
3.24.730.164 87 7/30/2024
3.24.730.91 93 7/30/2024
3.24.724.91 121 7/24/2024
3.24.718.105 140 7/18/2024
3.24.716.95 129 7/16/2024
3.24.712.94 123 7/12/2024
3.24.710.14 128 7/9/2024
3.24.709.105 131 7/9/2024
3.24.704.94 140 7/4/2024
3.24.701.90 143 7/1/2024
3.24.628.114 138 6/28/2024
3.24.627.145 123 6/27/2024
3.24.620.160 130 6/20/2024
3.24.613.115 122 6/13/2024
3.24.612.95 114 6/12/2024
3.24.528.90 132 5/28/2024
3.24.522.84 96 5/22/2024
3.24.512.213 103 5/12/2024
3.24.508.112 144 5/8/2024
2.2024.428.71 145 4/28/2024
2.2024.427.1128 126 4/27/2024
2.2.72 153 4/14/2024
2.2.71 133 4/12/2024
2.2.8 120 4/26/2024
2.2.6 128 4/10/2024
2.2.5 145 3/26/2024
2.2.4 291 3/25/2024
2.2.3 144 3/24/2024
2.2.2 130 3/21/2024
2.2.1 150 3/20/2024
2.2.0 148 3/13/2024
2.1.9 153 2/21/2024
2.1.8 147 2/18/2024
2.1.7 131 2/16/2024
2.1.6 142 2/14/2024
2.1.5 143 2/14/2024
2.1.4 146 2/9/2024
2.1.3 142 2/8/2024
2.1.2 105 2/5/2024
2.1.1.2 225 12/26/2023
2.1.1.1 140 12/26/2023
2.1.1 147 12/25/2023
2.1.0 155 12/17/2023
2.0.11 167 12/6/2023
2.0.1 151 11/15/2023
2.0.0 146 11/14/2023
1.9.1 147 11/1/2023
1.9.0 138 10/19/2023
1.9.0-preview2 115 10/12/2023
1.9.0-preview1 107 10/12/2023
1.8.9 162 10/11/2023
1.8.8 143 10/11/2023
1.8.7-rc2 112 9/21/2023
1.8.7-rc1 112 9/12/2023
1.8.6 398 8/31/2023
1.8.5 151 8/25/2023
1.8.4 156 8/24/2023
1.8.3 156 8/23/2023
1.8.2 157 8/22/2023
1.8.1 147 8/18/2023
1.8.0 184 8/15/2023
1.7.9 175 8/11/2023
1.7.8 172 8/11/2023
1.7.7 167 8/10/2023
1.7.6 168 8/9/2023
1.7.5 164 8/9/2023
1.7.4 179 8/3/2023
1.7.3 152 8/1/2023
1.7.2 156 7/31/2023
1.7.1 146 7/27/2023
1.7.0 176 7/25/2023
1.6.9 178 7/25/2023
1.6.8 172 7/24/2023
1.6.7 171 7/20/2023
1.6.6 160 7/19/2023
1.6.5 143 7/19/2023
1.6.4 168 7/17/2023
1.6.3 161 7/17/2023
1.6.2 162 7/12/2023
1.6.1 168 6/30/2023
1.6.0 162 6/26/2023
1.5.9 157 6/22/2023
1.5.8 177 6/15/2023
1.5.7.1 186 6/14/2023
1.5.7 173 6/14/2023
1.5.6.2 185 6/7/2023
1.5.6.1 192 6/7/2023
1.5.6 178 6/7/2023
1.5.5.2 161 5/26/2023
1.5.5.1 172 5/26/2023
1.5.5 180 5/26/2023
1.5.4.4 187 5/25/2023
1.5.4.3 177 5/23/2023
1.5.4.2 189 5/17/2023
1.5.4.1 181 5/16/2023
1.5.4 194 5/11/2023
1.5.3 192 5/11/2023
1.5.2 191 5/10/2023
1.5.1 186 5/10/2023
1.5.0 196 5/6/2023
1.4.0 177 5/5/2023
1.3.9 209 4/23/2023
1.3.8.6 213 4/23/2023
1.3.8.5 206 4/21/2023
1.3.8.1 217 4/12/2023
1.3.8 217 4/11/2023
1.3.7 221 4/9/2023
1.3.6.3 244 4/1/2023
1.3.6.2 234 3/31/2023
1.3.6.1 235 3/31/2023
1.3.6 238 3/31/2023
1.3.5 218 3/30/2023
1.3.4.1 260 3/29/2023
1.3.4 227 3/28/2023
1.3.3 244 3/28/2023
1.3.2 248 3/26/2023
1.3.1 257 3/22/2023
1.3.0 246 3/21/2023
1.2.0 260 3/21/2023
1.1.0 267 3/17/2023
1.0.9 264 3/16/2023