使用openssl加密和解密小文件

我想用C / C ++编写一个小程序,它读取一个小文本文件,并使用“内部”键对其进行加密。 然后我还想写另一个小程序,它可以使用内部相同的密钥解密加密文件。

我看了openSSL网站并用谷歌搜索但发现不是简单的例子,有人试过这样做吗?

理想情况下,您可以使用像ccrypt这样的现有工具,但这里有:

 #include  /* ... */ { 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; while (1) { bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp); AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec, &num, AES_ENCRYPT); bytes_written = fwrite(outdata, 1, bytes_read, ofp); if (bytes_read < AES_BLOCK_SIZE) break; } } 

通过使用AES_DECRYPT作为最后一个参数调用AES_cfb128_encrypt来完成解密。 请注意,除了最基本的测试之外,还没有给出这个代码,并且你真的应该为ckey和ivec使用适当的8位随机数据​​。

编辑 :似乎AES_cfb128_encrypt接受任意长度的数据,因此您不需要在AES_BLOCK_SIZE (16)字节的块中加密。

以前的答案指出了如何做你要求的。

我想补充说明为什么你不应该这样做

您所谈论的内容称为“对称加密”(相同的密钥用于加密和解密,而非对称加密,其中使用一个密钥加密的所有内容只能由特定对应方解密)。

反汇编可执行文件以确定正在使用的硬编码密钥是琐碎的。 这意味着,任何能够掌握您的可执行文件的人都可以破解任何已交换的消息的加密。

除非您考虑的应用程序非常具体,否则这意味着您的设置可能“看起来”安全,但事实并非如此。 在这些情况下,通常最好不要加密,这样就没有人因为那种错误的安全感而陷入困境……

您正在寻找标准库来进行加密(而不是自己实现/创建算法),但协议1如何使用和交换应用程序,密钥和消息)至少与密码本身一样重要。 您可能希望由密码学专家测试您的想法,告诉您缺点。 (我确信在StackOverflow这里有足够的那种。;-))

OpenSSL专门用于实现SSL和TLS,它们是用于通过网络加密数据的协议。 由于您只是想加密文件,因此可以使用OpenSSL但不理想。

相反,我会使用类似于BeeCrypt或Crypto ++ ®Library5.6.0的内容 ,它们都提供了使用它们的示例。