使用openssl加密和解密小文件 [英] Encrypting and decrypting a small file using openssl

查看:36
本文介绍了使用openssl加密和解密小文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to write a small program in C/C++ which reads a small text file, and encrypts it, using a "internal" key. Then I also want to write another small program which can decrypt the encrypted file using internally the same key.

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

I looked at openSSL site and googled but found not simple example, has somebody ever tried to do this thing?

推荐答案

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

Ideally, you could use an existing tool like ccrypt, but here goes:

#include <openssl/aes.h>

/* ... */


{
  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 位随机数据​​.

Decryption is done by calling AES_cfb128_encrypt with AES_DECRYPT as the last parameter. Note that this code hasn't been given anything more than the most elementary of testing, and that you really should use proper 8-bits random data for ckey and ivec.

EDIT:似乎 AES_cfb128_encrypt 接受任意长度的数据,所以你不需要在 AES_BLOCK_SIZE 块中加密 (16)字节.

EDIT: It seems AES_cfb128_encrypt accepts data of arbitrary length, so you're not required to encrypt in blocks of AES_BLOCK_SIZE (16) bytes.

这篇关于使用openssl加密和解密小文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆