https://www.toutiao.com/article/7222065065397060096/
https://github.com/maythamfahmi/CryptoNet
CryptoNet 是一个简单、快速且轻量级的非对称和对称加密 NuGet 库,支持跨平台 Windows、Linux。不依赖其他库, 100% C# 实现。
CryptoNet 可以通过两种方式使用:
• 对称方式
• 非对称方式
对称方式
您使用相同的密钥进行加密和解密。
非对称方式
通过非对称方式,CryptoNet 可以使用自己生成的 RSA 密钥对(私钥/公钥)来加密和解密内容。
您可以将私钥存储在一台或多台机器上。公钥可以轻松分发给所有客户端。
使用示例
1.使用对称密钥加密和解密内容
在下面示例中,CryptoNetAes 生成随机的密钥和 iv。
ICryptoNet cryptoNet = new CryptoNetAes();
var key = cryptoNet.ExportKey();
ICryptoNet encryptClient = new CryptoNetAes(key);
var encrypt = encryptClient.EncryptFromString(ConfidentialDummyData);
ICryptoNet decryptClient = new CryptoNetAes(key);
var decrypt = decryptClient.DecryptToString(encrypt);
Debug.Assert(ConfidentialDummyData == decrypt);
2.使用导出和导入, 自己生成的对称密钥,来加密和解密内容
ICryptoNet cryptoNet = new CryptoNetAes();
var file = new FileInfo(SymmetricKeyFile);
cryptoNet.ExportKeyAndSave(file);
Debug.Assert(File.Exists(file.FullName));
var encrypt = cryptoNet.EncryptFromString(ConfidentialDummyData);
ICryptoNet cryptoNetKeyImport = new CryptoNetAes(file);
var decrypt = cryptoNetKeyImport.DecryptToString(encrypt);
Debug.Assert(ConfidentialDummyData == decrypt);
- 生成非对称 Rsa 密钥对,导出私钥和公钥,使用公钥加密和使用私钥解密
ICryptoNet cryptoNet = new CryptoNetRsa();
cryptoNet.ExportKeyAndSave(new FileInfo(PrivateKeyFile), true);
cryptoNet.ExportKeyAndSave(new FileInfo(PublicKeyFile), false);
Debug.Assert(File.Exists(new FileInfo(PrivateKeyFile).FullName));
Debug.Assert(File.Exists(new FileInfo(PublicKeyFile).FullName));
ICryptoNet cryptoNetPubKey = new CryptoNetRsa(new FileInfo(PublicKeyFile));
var encrypt = cryptoNetPubKey.EncryptFromString(ConfidentialDummyData);
ICryptoNet cryptoNetPriKey = new CryptoNetRsa(new FileInfo(PrivateKeyFile));
var decrypt = cryptoNetPriKey.DecryptToString(encrypt);
Debug.Assert(ConfidentialDummyData == decrypt);
- 使用 X509 证书用公钥加密,然后用私钥解密
X509Certificate2? certificate = CryptoNetUtils.GetCertificateFromStore("CN=Maytham");
ICryptoNet cryptoNetWithPublicKey = new CryptoNetRsa(certificate, KeyType.PublicKey);
var encryptWithPublicKey = cryptoNetWithPublicKey.EncryptFromString(ConfidentialDummyData);
ICryptoNet cryptoNetWithPrivateKey = new CryptoNetRsa(certificate, KeyType.PrivateKey);
var decryptWithPrivateKey = cryptoNetWithPrivateKey.DecryptToString(encryptWithPublicKey);
Debug.Assert(ConfidentialDummyData == decryptWithPrivateKey);
文档更新时间: 2023-07-17 13:42 作者:admin