如何使用 RSA/AES encrypt/decrypt 更大的文件
How to encrypt/decrypt larger file using RSA/AES
好的,所以我正在寻找一种使用 RSA 和 AES encrypt/decrypt 更大文件的方法。
我不太明白我需要做什么。
情况是我有更大的文件(从 200kb 到 50mb 不等)。我希望能够加密特定文件,在当前目录中留下一个密钥(私钥)以及加密文件。然后用户可以保存密钥,随身携带,稍后回来解密文件。
我只是不太明白如何一起使用 AES/RSA 来实现这一点。我有一些代码可以执行简单的 RSA encryption/decryption 和一些可用的 AES 代码。我从其他 SO 问题中得到了这段代码。
我在 C++ 中使用 Openssl。
当前AES程序:(来自网上)
int main() {
int bytes_read, bytes_written;
unsigned char indata[AES_BLOCK_SIZE];
unsigned char outdata[AES_BLOCK_SIZE];
/* ckey and ivec are the two 128-bits keys necesary to
en- and recrypt your data. Note that ckey can be
192 or 256 bits as well */
unsigned char ckey[] = "thiskeyisverybad";
unsigned char ivec[] = "dontusethisinput";
/* data structure that contains the key itself */
AES_KEY key;
/* set the encryption key */
AES_set_encrypt_key(ckey, 128, &key);
/* set where on the 128 bit encrypted block to begin encryption*/
int num = 0;
FILE *ifp = fopen("out.txt", "rb");
FILE *ofp = fopen("outORIG.txt", "wb");
while (true) {
bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp);
AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec, &num,
AES_DECRYPT); //or AES_DECRYPT
bytes_written = fwrite(outdata, 1, bytes_read, ofp);
if (bytes_read < AES_BLOCK_SIZE)
break;
}
Okay so i'm looking for a way to encrypt/decrypt larger files using RSA and AES. I don't quite understand what I need to do...
您只需:
- 生成随机 AES 密钥
- 使用 AES 密钥加密大文件
- 使用 RSA 密钥加密 AES 密钥
此外,仅仅加密通常是不够的。这意味着您对 AES/CFB 的选择可以改进。这是因为 CFB(以及 CBC 等其他模式)仅提供机密性。您无法检测到意外和恶意篡改。
要改进此模式,您应该 select 提供保密性和真实性的模式。 AES/GCM 是个不错的选择。 EVP Authenticated Encryption and Decryption.
的 OpenSSL wiki 上有一个示例
您可以在 Authenticated Encryption 上的 Crypto++ wiki 上阅读有关经过身份验证的加密的更多信息。它是一个不同的库和不同的 wiki,但它提供了有关经过身份验证的加密的信息。
在理想情况下,OpenSSL 会提供像 Shoup 的 Elliptic Curve Integrated Encryption Scheme (ECIES) or Abdalla, Bellare and Rogaway's Diffie-Hellman Authenticated Encryption Scheme (DHAES) 那样的集成加密方案。集成的加密方案为您完成这一切。
顺便说一下,Crypto++ is a C++ crypto library that provides both integrated encryption schemes. Maybe you should consider switching security libraries. Here's the documentation with sample code on ECIES。
好的,所以我正在寻找一种使用 RSA 和 AES encrypt/decrypt 更大文件的方法。 我不太明白我需要做什么。
情况是我有更大的文件(从 200kb 到 50mb 不等)。我希望能够加密特定文件,在当前目录中留下一个密钥(私钥)以及加密文件。然后用户可以保存密钥,随身携带,稍后回来解密文件。
我只是不太明白如何一起使用 AES/RSA 来实现这一点。我有一些代码可以执行简单的 RSA encryption/decryption 和一些可用的 AES 代码。我从其他 SO 问题中得到了这段代码。
我在 C++ 中使用 Openssl。
当前AES程序:(来自网上)
int main() {
int bytes_read, bytes_written;
unsigned char indata[AES_BLOCK_SIZE];
unsigned char outdata[AES_BLOCK_SIZE];
/* ckey and ivec are the two 128-bits keys necesary to
en- and recrypt your data. Note that ckey can be
192 or 256 bits as well */
unsigned char ckey[] = "thiskeyisverybad";
unsigned char ivec[] = "dontusethisinput";
/* data structure that contains the key itself */
AES_KEY key;
/* set the encryption key */
AES_set_encrypt_key(ckey, 128, &key);
/* set where on the 128 bit encrypted block to begin encryption*/
int num = 0;
FILE *ifp = fopen("out.txt", "rb");
FILE *ofp = fopen("outORIG.txt", "wb");
while (true) {
bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp);
AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec, &num,
AES_DECRYPT); //or AES_DECRYPT
bytes_written = fwrite(outdata, 1, bytes_read, ofp);
if (bytes_read < AES_BLOCK_SIZE)
break;
}
Okay so i'm looking for a way to encrypt/decrypt larger files using RSA and AES. I don't quite understand what I need to do...
您只需:
- 生成随机 AES 密钥
- 使用 AES 密钥加密大文件
- 使用 RSA 密钥加密 AES 密钥
此外,仅仅加密通常是不够的。这意味着您对 AES/CFB 的选择可以改进。这是因为 CFB(以及 CBC 等其他模式)仅提供机密性。您无法检测到意外和恶意篡改。
要改进此模式,您应该 select 提供保密性和真实性的模式。 AES/GCM 是个不错的选择。 EVP Authenticated Encryption and Decryption.
的 OpenSSL wiki 上有一个示例您可以在 Authenticated Encryption 上的 Crypto++ wiki 上阅读有关经过身份验证的加密的更多信息。它是一个不同的库和不同的 wiki,但它提供了有关经过身份验证的加密的信息。
在理想情况下,OpenSSL 会提供像 Shoup 的 Elliptic Curve Integrated Encryption Scheme (ECIES) or Abdalla, Bellare and Rogaway's Diffie-Hellman Authenticated Encryption Scheme (DHAES) 那样的集成加密方案。集成的加密方案为您完成这一切。
顺便说一下,Crypto++ is a C++ crypto library that provides both integrated encryption schemes. Maybe you should consider switching security libraries. Here's the documentation with sample code on ECIES。