数据加密
一、核心功能
数据加密是 JNPF 框架提供的统一加密系统,支持多种加密算法,包括对称加密和非对称加密。
1.1 核心价值
- 多种加密算法:支持 AES、DES、RSA、SHA、MD5、PBKDF2 等多种加密算法
- 统一接口:提供统一的加密接口,切换加密算法无需修改业务代码
- 扩展方法:提供字符串扩展方法,简化加密调用
- 安全可靠:实现业界标准的加密算法,确保数据安全
二、加密算法
2.1 对称加密
对称加密使用相同的密钥进行加密和解密:
| 算法 | 说明 | 密钥长度 | 安全性 |
|---|---|---|---|
| AES | 高级加密标准 | 128/192/256 位 | 高 |
| DES | 数据加密标准 | 56 位 | 低(已过时) |
2.2 非对称加密
非对称加密使用公钥加密,私钥解密:
| 算法 | 说明 | 密钥长度 | 安全性 |
|---|---|---|---|
| RSA | 非对称加密算法 | 1024/2048/4096 位 | 高 |
2.3 哈希算法
哈希算法将任意长度的数据转换为固定长度的哈希值:
| 算法 | 说明 | 输出长度 | 安全性 |
|---|---|---|---|
| MD5 | 消息摘要算法 | 128 位 | 低(已过时) |
| SHA-1 | 安全哈希算法 | 160 位 | 低(已过时) |
| SHA-256 | 安全哈希算法 | 256 位 | 高 |
| SHA-512 | 安全哈希算法 | 512 位 | 高 |
2.4 密钥派生算法
| 算法 | 说明 | 用途 |
|---|---|---|
| PBKDF2 | 基于密码的密钥派生函数 | 密码哈希 |
三、实现方式
3.1 AES 加密
publicclassAESEncryption{privatereadonlyIAESEncrypt_encrypt;publicAESEncryption(IAESEncryptencrypt){_encrypt=encrypt;}publicstringEncrypt(stringplainText,stringkey,stringiv){return_encrypt.Encrypt(plainText,key,iv);}publicstringDecrypt(stringcipherText,stringkey,stringiv){return_encrypt.Decrypt(cipherText,key,iv);}}3.2 RSA 加密
publicclassRSAEncryption{public(stringPublicKey,stringPrivateKey)GenerateKeyPair(intkeySize=2048){usingvarrsa=newRSACryptoServiceProvider(keySize);return(rsa.ToXmlString(false),rsa.ToXmlString(true));}publicstringEncrypt(stringplainText,stringpublicKey){usingvarrsa=newRSACryptoServiceProvider();rsa.FromXmlString(publicKey);varbytes=Encoding.UTF8.GetBytes(plainText);varencryptedBytes=rsa.Encrypt(bytes,true);returnConvert.ToBase64String(encryptedBytes);}publicstringDecrypt(stringcipherText,stringprivateKey){usingvarrsa=newRSACryptoServiceProvider();rsa.FromXmlString(privateKey);varbytes=Convert.FromBase64String(cipherText);vardecryptedBytes=rsa.Decrypt(bytes,true);returnEncoding.UTF8.GetString(decryptedBytes);}}3.3 SHA 哈希
publicclassSHA1Encryption{publicstringEncrypt(stringplainText){usingvarsha1=SHA1.Create();varbytes=Encoding.UTF8.GetBytes(plainText);varhashBytes=sha1.ComputeHash(bytes);returnBitConverter.ToString(hashBytes).Replace("-","");}}四、使用示例
4.1 字符串扩展方法
框架提供了丰富的字符串扩展方法:
// AES 加密/解密stringencrypted="Hello World".AESEncrypt(key,iv);stringdecrypted=encrypted.AESDecrypt(key,iv);// RSA 加密/解密stringencrypted="Hello World".RSAEncrypt(publicKey);stringdecrypted=encrypted.RSADecrypt(privateKey);// SHA1 哈希stringhash="password".SHA1Encrypt();// MD5 哈希stringhash="password".MD5Encrypt();// PBKDF2 密码哈希stringhash="password".PBKDF2Encrypt();boolverified="password".PBKDF2Verify(hash);4.2 直接调用加密类
publicclassUserService{privatereadonlyAESEncryption_aesEncryption;privatereadonlyRSAEncryption_rsaEncryption;publicUserService(AESEncryptionaesEncryption,RSAEncryptionrsaEncryption){_aesEncryption=aesEncryption;_rsaEncryption=rsaEncryption;}publicvoidEncryptUserData(UserInfouser){// 使用 AES 加密敏感数据user.Email=_aesEncryption.Encrypt(user.Email,"key","iv");user.Phone=_aesEncryption.Encrypt(user.Phone,"key","iv");}publicvoidEncryptForTransmission(stringdata){// 使用 RSA 加密传输数据varencrypted=_rsaEncryption.Encrypt(data,"publicKey");}}4.3 密码哈希
publicclassAuthService{publicstringHashPassword(stringpassword){returnpassword.PBKDF2Encrypt();}publicboolVerifyPassword(stringpassword,stringhashedPassword){returnpassword.PBKDF2Verify(hashedPassword);}}4.4 RSA 密钥生成
publicclassKeyService{public(stringPublicKey,stringPrivateKey)GenerateKeys(){varrsa=newRSAEncryption();returnrsa.GenerateKeyPair(2048);}}五、配置选项
5.1 加密配置
在appsettings.json中配置:
{"EncryptionSettings":{"AES":{"Key":"your-256-bit-key","IV":"your-128-bit-iv"},"RSA":{"KeySize":2048,"PublicKey":"your-public-key","PrivateKey":"your-private-key"}}}5.2 AES 配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
Key | null | AES 密钥(16/24/32 字节) |
IV | null | 初始化向量(16 字节) |
5.3 RSA 配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
KeySize | 2048 | RSA 密钥长度 |
PublicKey | null | RSA 公钥 |
PrivateKey | null | RSA 私钥 |
六、高级特性
6.1 加密帮助类
使用EncryptionHelper简化加密操作:
// AES 加密stringencrypted=EncryptionHelper.AESEncrypt("Hello World","key","iv");// AES 解密stringdecrypted=EncryptionHelper.AESDecrypt(encrypted,"key","iv");// RSA 加密stringencrypted=EncryptionHelper.RSAEncrypt("Hello World","publicKey");// RSA 解密stringdecrypted=EncryptionHelper.RSADecrypt(encrypted,"privateKey");6.2 随机密钥生成
// 生成随机 AES 密钥(256 位)stringkey=AESEncrypt.GenerateKey(256);// 生成随机 IV(128 位)stringiv=AESEncrypt.GenerateIV();// 生成 RSA 密钥对var(publicKey,privateKey)=RSAEncryption.GenerateKeyPair(2048);6.3 加密模式
支持多种 AES 加密模式:
| 模式 | 说明 |
|---|---|
CBC | 密码块链模式(默认) |
ECB | 电子密码本模式 |
CFB | 密码反馈模式 |
OFB | 输出反馈模式 |
6.4 填充模式
支持多种填充模式:
| 模式 | 说明 |
|---|---|
PKCS7 | PKCS7 填充(默认) |
Zeros | 零填充 |
None | 无填充 |
6.5 文件加密
使用 AES 加密文件:
publicvoidEncryptFile(stringinputPath,stringoutputPath,stringkey,stringiv){usingvarinputStream=File.OpenRead(inputPath);usingvaroutputStream=File.OpenWrite(outputPath);usingvaraes=Aes.Create();aes.Key=Encoding.UTF8.GetBytes(key);aes.IV=Encoding.UTF8.GetBytes(iv);usingvarencryptor=aes.CreateEncryptor();usingvarcryptoStream=newCryptoStream(outputStream,encryptor,CryptoStreamMode.Write);inputStream.CopyTo(cryptoStream);}6.6 安全建议
| 建议 | 说明 |
|---|---|
| 使用 AES-256 | 优先使用 256 位密钥的 AES 加密 |
| 使用 RSA-2048+ | 优先使用 2048 位以上的 RSA 密钥 |
| 不要使用 MD5/SHA-1 | 这些算法已被证明不安全 |
| 使用 PBKDF2 存储密码 | 不要直接存储密码明文或简单哈希 |
| 妥善保管密钥 | 密钥不要硬编码在代码中,使用配置文件或密钥管理服务 |
七、核心文件
| 文件 | 说明 |
|---|---|
AESEncryption.cs | AES 对称加密实现 |
AESEncrypt.cs | AES 加密接口实现 |
RSAEncryption.cs | RSA 非对称加密实现 |
SHA1Encryption.cs | SHA-1 哈希实现 |
MD5Encryption.cs | MD5 哈希实现 |
PBKDF2Encryption.cs | PBKDF2 密钥派生实现 |
DESCEncryption.cs | DES 对称加密实现 |
StringEncryptionExtensions.cs | 字符串加密扩展方法 |
八、总结
数据加密通过统一的加密接口和多种加密算法支持,实现了灵活的数据加密管理。核心设计思想:
- 多种加密算法:支持 AES、DES、RSA、SHA、MD5、PBKDF2 等多种加密算法
- 统一接口:提供统一的加密接口,切换加密算法无需修改业务代码
- 扩展方法:提供字符串扩展方法,简化加密调用
- 安全可靠:实现业界标准的加密算法,确保数据安全
- 灵活配置:支持通过配置文件配置加密参数
这种设计使得数据加密更加灵活和便捷,提高了应用的安全性。