Encrypting and decrypting a small file using openssl

后端 未结 3 1671
遥遥无期
遥遥无期 2020-12-02 13:48

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

3条回答
  •  心在旅途
    2020-12-02 14:20

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

    #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;
      }
    }
    

    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: 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.

提交回复
热议问题