使用 AES 的 C# 私有(private)/公共(public)加密

标签 c# .net security encryption rijndaelmanaged

我正在尝试弄清楚如何制作 AES 加密的公钥/私钥。我希望能够像这样使用它:

byte[] BytesToEncrypt = { 0x01, 0x02, 0x03, 0x04, 0x05 };
byte[] PublicKey;
byte[] PrivateKey;
byte[] EncryptedBytes;
byte[] UnencryptedBytes;

PrivateKey = CreatePrivateKey();
PublicKey = CreatePublicKey(PrivateKey);
EncryptedBytes = EncryptBytes(PrivateKey);
// This line should return unencrypted bytes
UnencryptedBytes = UnencryptBytes(EncryptedBytes, PrivateKey);
// This line should also return the unencrypted bytes
UnencryptedBytes = UnencryptBytes(EncryptedBytes, PublicKey);

我怎样才能实现这样的东西?我见过公共(public)/私有(private)加密,但我见过的所有示例似乎都使用 RSA 加密。我想使用 AES。这可能吗?

最佳答案

AES 是一种用于对称 key 加密的算法,因此谈论 AES 公钥和私钥没有意义。如果您的 AES key 是公开的,则根本没有安全性。

如果您愿意,您可以使用 AES 加密来加密 RSA 公钥,但这不是必需的,因为它不是您需要保密的东西。

您可以使用 AES 加密来加密 RSA 私钥。如果您想用密码保护您的 key ,这可能很有用,这样如果您的计算机被盗,他们就无法使用您的 key 。

您还可以使用非对称加密将对称 key 传输给另一方,然后使用对称加密与他们通信。 TLS使用这个原理。它可能很有用,因为对称算法可以更快地计算,但以纯文本形式向某人发送对称 key 是不安全的,因此您需要非对称加密来保证对称 key 的安全。

关于使用 AES 的 C# 私有(private)/公共(public)加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3672049/

相关文章:

C# 创建对齐网格功能

c# - 反射器中的列表

java - Lucene 和访问控制(评论的可见性)

java - 过滤 URL 以仅允许公开可见的 URL

php - 加密电子邮件、散列密码并将其存储在数据库中?

c# - 用点编码 URL

c# - 如何获取xpath中的最后一张表?

c# - 在基页上使用 "FindControl"

c# - 如何对中间层 .NET 应用程序类/方法进行版本控制

.net - 在大型 .NET 项目中管理 DTO 和映射