2

我试图弄清楚如何制作 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);

我怎样才能实现这样的事情?我见过公共/私人加密,但我见过的所有例子似乎都使用 RSA 加密。我想使用 AES。这可能吗?

4

2 回答 2

7

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

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

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

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

于 2010-09-08T21:30:52.977 回答
2

虽然 AES 加密是对称的,但我假设您的目标是加密数据(并且无论出于何种原因都必须使用 AES),将该数据提供给其他人,允许他们读取它,但前提是他们拥有您的公钥。

您可以考虑以下工作流程:

  1. 生成 AES 加密密钥。
  2. 使用 AES 加密密钥加密您的数据。
  3. 生成公钥和私钥。
  4. 使用私钥加密您的 AES 加密密钥。
  5. 分发 AES 加密数据、您的公钥和由私钥加密的 AES 密钥。

这类似于 SSL 所做的(不完全是因为有一个握手过程,数据使用公钥而不是私钥加密),但可能满足您的需求。

此工作流程确保只有在有人拥有您的公钥时才能发现您的 AES 密钥,但鉴于他们随后拥有正确的 AES 密钥,不会阻止有人用其他数据替换您的原始数据。这就是公钥/私钥数据签名的用途。

于 2010-09-08T21:40:38.413 回答