Liam.Cryptography
1.1.0
dotnet add package Liam.Cryptography --version 1.1.0
NuGet\Install-Package Liam.Cryptography -Version 1.1.0
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="Liam.Cryptography" Version="1.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Liam.Cryptography" Version="1.1.0" />
<PackageReference Include="Liam.Cryptography" />
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 Liam.Cryptography --version 1.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Liam.Cryptography, 1.1.0"
#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.
#:package Liam.Cryptography@1.1.0
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Liam.Cryptography&version=1.1.0
#tool nuget:?package=Liam.Cryptography&version=1.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Liam.Cryptography
功能概述
Liam.Cryptography是Liam系列.NET功能库集合中的核心加密库,提供现代化的加密解密功能,包括对称加密、非对称加密、哈希算法、数字签名和密钥管理等功能。
🔐 支持的加密算法
- 对称加密: AES-256-CBC, ChaCha20-Poly1305 (AEAD)
- 非对称加密: RSA-2048/4096, ECDSA P-256
- 哈希算法: SHA-256, Argon2id (密码哈希)
- 数字签名: RSA-PSS, ECDSA
- 密钥管理: PBKDF2, 安全随机数生成
⚡ 性能特性
- 流式处理支持大文件加密/解密
- 异步操作支持非阻塞处理
- 优化的缓冲区管理(默认64KB)
- 现代.NET 8性能特性和可空引用类型支持
安装
dotnet add package Liam.Cryptography
快速开始
using Liam.Cryptography.Services;
using Liam.Cryptography.Extensions;
// 使用AES对称加密
var aes = new AesSymmetricCrypto();
var key = aes.GenerateKey(256);
var encrypted = "Hello World".EncryptAes(key);
var decrypted = encrypted.DecryptAes(key);
// 使用RSA非对称加密
var rsa = new RsaAsymmetricCrypto();
var keyPair = rsa.GenerateKeyPair(2048);
var rsaEncrypted = "Hello World".EncryptRsa(keyPair.PublicKey);
var rsaDecrypted = rsaEncrypted.DecryptRsa(keyPair.PrivateKey);
// 计算SHA256哈希
var hash = "Hello World".ToSha256Hash();
// 数字签名
var signature = "Hello World".SignRsa(keyPair.PrivateKey);
var isValid = "Hello World".VerifyRsaSignature(signature, keyPair.PublicKey);
// 现代加密算法
// ChaCha20-Poly1305 AEAD加密
var chachaKey = new ChaCha20Poly1305Crypto().GenerateKey();
var chachaEncrypted = "Hello World".EncryptChaCha20Poly1305(chachaKey);
var chachaDecrypted = chachaEncrypted.DecryptChaCha20Poly1305(chachaKey);
// ECDSA数字签名
var ecdsaKeyPair = new Ed25519DigitalSignature().GenerateKeyPair();
var ecdsaSignature = "Hello World".SignEcdsa(ecdsaKeyPair.PrivateKey);
var ecdsaValid = "Hello World".VerifyEcdsaSignature(ecdsaSignature, ecdsaKeyPair.PublicKey);
// Argon2密码哈希
var passwordHash = "mypassword".ToArgon2Hash();
var passwordValid = "mypassword".VerifyArgon2Hash(passwordHash);
// 流式处理大文件
using var inputStream = File.OpenRead("large-file.txt");
using var outputStream = File.Create("large-file.encrypted");
var aesKey = new AesSymmetricCrypto().GenerateKey();
await inputStream.EncryptAesStreamAsync(outputStream, aesKey);
API文档
核心接口
- ISymmetricCrypto: 对称加密接口
- IAsymmetricCrypto: 非对称加密接口
- IHashProvider: 哈希算法提供者接口
- IDigitalSignature: 数字签名接口
- IKeyManager: 密钥管理接口
主要类
- AesSymmetricCrypto: AES对称加密实现(支持流式处理)
- ChaCha20Poly1305Crypto: ChaCha20-Poly1305 AEAD加密实现
- RsaAsymmetricCrypto: RSA非对称加密实现
- Ed25519DigitalSignature: ECDSA数字签名实现(Ed25519替代)
- Sha256HashProvider: SHA256哈希算法实现(支持流式处理)
- Argon2PasswordHasher: Argon2密码哈希实现
- RsaDigitalSignature: RSA数字签名实现
- CryptoKeyManager: 密钥管理服务实现
扩展方法
- StringCryptoExtensions: 字符串加密扩展方法(增强可空引用类型支持)
- ModernCryptoExtensions: 现代加密算法扩展方法
- StreamCryptoExtensions: 流式处理扩展方法
- ByteArrayCryptoExtensions: 字节数组加密扩展方法
使用示例
基础用法
AES对称加密
var aes = new AesSymmetricCrypto();
// 生成密钥和IV
var key = aes.GenerateKey(256);
var iv = aes.GenerateIV();
// 加密
var plainText = "这是要加密的数据";
var encrypted = aes.Encrypt(plainText, key, iv);
// 解密
var decrypted = aes.Decrypt(encrypted, key, iv);
RSA非对称加密
var rsa = new RsaAsymmetricCrypto();
// 生成密钥对
var keyPair = rsa.GenerateKeyPair(2048);
// 使用公钥加密
var plainText = "这是要加密的数据";
var encrypted = rsa.EncryptWithPublicKey(plainText, keyPair.PublicKey);
// 使用私钥解密
var decrypted = rsa.DecryptWithPrivateKey(encrypted, keyPair.PrivateKey);
SHA256哈希计算
var hashProvider = new Sha256HashProvider();
// 计算字符串哈希
var hash1 = hashProvider.ComputeHash("Hello World");
// 计算文件哈希
var hash2 = hashProvider.ComputeFileHash("path/to/file.txt");
// 验证哈希
var isValid = hashProvider.VerifyHash("Hello World", hash1);
数字签名
var signature = new RsaDigitalSignature();
var keyPair = new RsaAsymmetricCrypto().GenerateKeyPair(2048);
// 生成签名
var data = "要签名的数据";
var sign = signature.Sign(data, keyPair.PrivateKey);
// 验证签名
var isValid = signature.Verify(data, sign, keyPair.PublicKey);
高级用法
密钥管理
var keyManager = new CryptoKeyManager();
// 生成对称密钥
var symmetricKey = keyManager.GenerateSymmetricKey(256);
// 生成非对称密钥对
var asymmetricKeyPair = keyManager.GenerateAsymmetricKeyPair(2048);
// 导出密钥到文件
keyManager.ExportKey(symmetricKey, "symmetric.key", "password");
keyManager.ExportKeyPair(asymmetricKeyPair, "private.pem", "public.pub", "password");
// 从文件导入密钥
var importedKey = keyManager.ImportKey("symmetric.key", "password");
var importedPrivateKey = keyManager.ImportPrivateKey("private.pem", "password");
var importedPublicKey = keyManager.ImportPublicKey("public.pub");
异步操作
// 异步加密
var encryptedAsync = await aes.EncryptAsync(plainText, key, iv);
// 异步解密
var decryptedAsync = await aes.DecryptAsync(encryptedAsync, key, iv);
// 异步哈希计算
var hashAsync = await hashProvider.ComputeHashAsync("Hello World");
// 异步数字签名
var signAsync = await signature.SignAsync(data, keyPair.PrivateKey);
var verifyAsync = await signature.VerifyAsync(data, signAsync, keyPair.PublicKey);
最佳实践
1. 密钥安全管理
// 使用安全的密钥长度
var key = aes.GenerateKey(256); // AES-256
var keyPair = rsa.GenerateKeyPair(2048); // RSA-2048
// 及时清除敏感数据
key.SecureClear();
keyPair.ClearPrivateKey();
2. 异常处理
try
{
var encrypted = aes.Encrypt(plainText, key);
}
catch (EncryptionException ex)
{
// 处理加密异常
Console.WriteLine($"加密失败: {ex.Message}");
}
catch (CryptographyException ex)
{
// 处理通用加密异常
Console.WriteLine($"加密库异常: {ex.ErrorCode} - {ex.Message}");
}
3. 使用扩展方法简化操作
// 简化的哈希计算
var hash = "Hello World".ToSha256Hash();
// 简化的加密操作
var encrypted = "Hello World".EncryptAes(key);
var decrypted = encrypted.DecryptAes(key);
// 简化的数字签名
var signature = "Hello World".SignRsa(privateKey);
var isValid = "Hello World".VerifyRsaSignature(signature, publicKey);
支持的算法
对称加密
- AES-128/192/256 (CBC模式,支持流式处理)
- ChaCha20-Poly1305 (AEAD认证加密,推荐用于现代应用)
非对称加密
- RSA (2048-4096位,PKCS#8格式)
- ECDSA (P-256曲线,作为Ed25519的兼容实现)
哈希算法
- SHA-256 (推荐,支持流式处理)
- Argon2id (密码哈希,推荐替代PBKDF2)
数字签名
- RSA-PSS (SHA-256)
- ECDSA (P-256 + SHA-256)
密钥管理
- PBKDF2 (密钥派生)
- 安全随机数生成 (密钥和IV生成)
性能优化特性
- 流式处理 (支持大文件,默认64KB缓冲区)
- 异步操作 (所有I/O密集型操作)
- 可空引用类型 (完整的null安全支持)
- 现代.NET特性 (Span<T>, Memory<T>等)
测试覆盖率
当前测试覆盖情况:
- 单元测试项目: Liam.Cryptography.Tests
- 测试框架: xUnit + Moq + FluentAssertions
- 测试用例总数: 272个
- 测试通过率: 100% (272/272个测试通过) 🎉
- 主要修复:
- ✅ AES加密解密核心问题已修复
- ✅ 异常类型匹配问题已修复
- ✅ 空字符串处理问题已修复
- ✅ 字节数组扩展方法问题已修复
- ✅ RSA密钥格式统一为PKCS#8标准格式
- ✅ CryptoKeyManager异常处理优化
- ✅ 对称密钥生成验证逻辑修复
- ✅ 测试隔离问题修复
- ✅ 数字签名验证异常处理优化
- ✅ 字符串扩展方法异常处理修复
- 测试覆盖范围:
- ✅ AES对称加密服务测试 (AesSymmetricCryptoTests)
- ✅ RSA非对称加密服务测试 (RsaAsymmetricCryptoTests)
- ✅ SHA256哈希提供者测试 (Sha256HashProviderTests)
- ✅ RSA数字签名服务测试 (RsaDigitalSignatureTests)
- ✅ 密钥管理服务测试 (CryptoKeyManagerTests)
- ✅ 密钥对模型测试 (KeyPairTests)
- ✅ 字符串加密扩展方法测试 (StringCryptoExtensionsTests)
- ✅ 字节数组加密扩展方法测试 (ByteArrayCryptoExtensionsTests)
测试运行命令
# 运行所有测试
dotnet test tests/Liam.Cryptography.Tests
# 运行特定测试类
dotnet test tests/Liam.Cryptography.Tests --filter "ClassName=AesSymmetricCryptoTests"
# 生成测试覆盖率报告
dotnet test tests/Liam.Cryptography.Tests --collect:"XPlat Code Coverage"
版本历史
版本 | 发布日期 | 主要变更 |
---|---|---|
1.1.0 | 2025-06-15 | 重大功能扩展和性能优化:<br/>🔐 新增现代加密算法<br/>- ChaCha20-Poly1305 AEAD加密<br/>- ECDSA数字签名(Ed25519替代)<br/>- Argon2id密码哈希<br/>⚡ 性能优化<br/>- 流式处理支持大文件加密/解密<br/>- 异步方法支持非阻塞处理<br/>- 优化缓冲区管理(默认64KB)<br/>🛡️ 安全性改进<br/>- 完整的可空引用类型支持<br/>- 增强的参数验证和异常处理<br/>- 现代.NET 8性能特性应用 |
1.0.1 | 2025-06-15 | 安全性和API设计优化:<br/>- 升级密钥保护机制为PBKDF2+AES-GCM<br/>- 移除不合理的DecryptWithPublicKey方法<br/>- 向后兼容旧密钥格式 |
1.0.0 | 2025-06-14 | 初始版本,包含完整的加密功能和单元测试 |
许可证
MIT License
贡献
欢迎提交Issue和Pull Request来改进这个库。
支持
如果您在使用过程中遇到问题,请在GitHub上提交Issue。
Product | Versions 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 was computed. 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 was computed. 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.
-
net8.0
- Konscious.Security.Cryptography.Argon2 (>= 1.3.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.