好的,所以我正在寻找一种使用RSA和AES加密/解密更大文件的方法。 我不太明白我需要做什么。
场景是我有更大的文件(200kb - 50mb)。我希望能够加密特定文件,在当前目录中保留密钥(私钥)以及加密文件。然后,用户可以保存密钥,随身携带密钥并在以后返回解密文件。
我只是不太明白如何使用AES / RSA来实现这一目标。我有一些代码可以进行简单的RSA加密/解密和一些有效的AES代码。我从其他SO问题中得到了这段代码。
我正在使用Openssl和C ++。
目前的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;
}
答案 0 :(得分:5)
好的,我正在寻找一种使用RSA和AES加密/解密更大文件的方法。我不太明白我需要做什么......
您需要做的就是:
另外,仅加密通常是不够的。这意味着您可以改进AES / CFB的选择。这是因为CFB(以及其他模式如CBC)仅提供机密性。您无法检测到意外和恶意篡改。
要改进模式,您应选择提供机密性和真实性的模式。 AES / GCM将是一个不错的选择。在EVP Authenticated Encryption and Decryption的OpenSSL wiki上有一个例子。
您可以在Authenticated Encryption的Crypto ++ wiki上阅读有关Authenticated Encryption的更多信息。它是一个不同的库和不同的wiki,但它提供了有关经过身份验证的加密的信息。
在理想的世界中,OpenSSL将提供集成加密方案,如Shoup的Elliptic Curve Integrated Encryption Scheme(ECIES)或Abdalla,Bellare和Rogaway的Diffie-Hellman Authenticated Encryption Scheme(DHAES)。集成的加密方案可以帮到您。
顺便说一下,Crypto++是一个C ++加密库,它提供了两种集成加密方案。也许您应该考虑切换安全库。这是包含ECIES上示例代码的文档。