Mo *_*igi 0 c++ openssl rsa aes
好的,所以我正在寻找一种使用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;
}
Run Code Online (Sandbox Code Playgroud)
好的,所以我正在寻找一种使用RSA和AES加密/解密更大文件的方法.我不太明白我需要做什么......
你需要做的就是:
此外,仅加密通常是不够的.这意味着您可以改进AES/CFB的选择.这是因为CFB(以及其他模式如CBC)仅提供机密性.您无法检测到意外和恶意篡改.
要改进模式,您应该选择提供机密性和真实性的模式.AES/GCM将是一个不错的选择.在EVS Authenticated Encryption and Decryption的OpenSSL wiki上有一个例子.
你可以阅读更多有关在加密+在维基认证加密认证加密.它是一个不同的库和不同的wiki,但它提供有关经过身份验证的加密的信息.
在理想的世界中,OpenSSL将提供集成加密方案,如Shoup的椭圆曲线集成加密方案(ECIES)或Abdalla,Bellare和Rogaway的Diffie-Hellman认证加密方案(DHAES).集成的加密方案可以满足您的需求.
顺便说一下,Crypto ++是一个C++加密库,它提供了两种集成加密方案.也许您应该考虑切换安全库.这是包含ECIES示例代码的文档.
| 归档时间: |
|
| 查看次数: |
5280 次 |
| 最近记录: |