在C ++中使用OpenSSL加密AES中的字符串

时间:2018-11-15 16:44:28

标签: c++ encryption openssl

我使用OpenSSL库具有此AES加密功能,该函数接收3个值作为参数,第一个是密钥(16个ASCII字符),第二个是要加密的消息(也是ASCII),第三个是消息的大小,该函数以(\d+) +(AB|DE|RG|DU)格式返回加密的字符串。

string

这就是我调用和使用函数的方式:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdarg.h>

#include "openSSL/aes.h"

using namespace std;

string encAES(char* Key, char* Msg, int size)
{
    static char* Res;
    string output;
    AES_KEY enc_key;

    static const char* const lut = "0123456789ABCDEF";

    Res = (char *)malloc(size);

    AES_set_encrypt_key((unsigned char *)Key, 128, &enc_key);

    for(int aux = 0; aux <= size; aux += 16)
    {
        AES_ecb_encrypt((unsigned char *)Msg + aux, (unsigned char *)Res + aux, &enc_key, AES_ENCRYPT);
    }        

    output.reserve(2 * size);

    for (size_t i = 0; i < size; ++i)
    {
        const unsigned char c = Res[i];
        output.push_back(lut[c >> 4]);
        output.push_back(lut[c & 15]);
    }

    free(Res);

    return output;
}

我想要的是函数int main(int argc, char const *argv[]) { char charKey[16 + 1] = {0}; char charMes[800 + 1] = {0}; //16 KEY ASCII string str_key = "ABCDEFGHIJKLMNOP"; memset(charKey, 0, sizeof(charKey)); strcpy(charKey, str_key.c_str()); //Variable MESSAGE ASCII string str_mes = "Hello World! This is a test chain."; memset(charMes, 0, sizeof(charMes)); strcpy(charMes, str_mes.c_str()); string enc_mes = encAES(charKey, charMes, sizeof(charMes)); return 0; } 现在收到两个值:键和encAES()中的消息,请尝试以下操作,但是会产生错误(我不知道,因为程序意外关闭) :

string

0 个答案:

没有答案