AES_ctr128_encrypt () "Ошибка сегментации" (OpenSSL) - PullRequest
2 голосов
/ 13 августа 2011

Мне нужно расшифровать программирование некоторых текстов шифров (aes 128 ctr) на C, используя openssl, так как используемая версия библиотек не поддерживает EVP для aes ctr, я пытаюсь использовать AES_ctr128_encrypt (), но я получаю сегментациюошибка, вот код, который я использую:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/aes.h>

int chartoint(char car);
char * extochar(char * in, int inLen);

struct ctr_state { 
    unsigned char ivec[16];   
    unsigned int num; 
    unsigned char ecount[16]; 
}; 

void init_ctr(struct ctr_state *state, const unsigned char iv[16]){
    state->num = 0; 
    memset(state->ecount, 0, 16); 
    memcpy(state->ivec, iv, 16);
} 

void main(){
    unsigned char * cypher = extochar("874d6191b620e3261bef6864990db6ce",32);
    unsigned char * key = extochar("2b7e151628aed2a6abf7158809cf4f3c",32);
    unsigned char * iv = extochar("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",32);
    unsigned char out[256]; //more than needed
    AES_KEY aes_key;
    int msg_len = 16;
    struct ctr_state status; 

    if (!AES_set_encrypt_key(key, 16, &aes_key)){
        printf("key error"); 
        exit(-1);
    }

    init_ctr(&status, iv);

    AES_ctr128_encrypt(cypher, out, msg_len, &aes_key, status.ivec, status.ecount, &status.num);
//expected plaintext: "6bc1bee22e409f96e93d7e117393172a"
}

ошибка сегментации на istruction AES_ctr128_encrypt (), последняя, ​​в то время как я ожидаю "6bc1bee22e409f96e93d7e117393172a" в виде открытого текста (используя printf ("% 02x"), var [i]) распечатать)

1 Ответ

2 голосов
/ 13 августа 2011

Ваш ключ AES имеет длину 256 бит. Вы говорите AES_set_encrypt_key, что это 16 бит. А затем вы передаете ключ AES_ctr 128 _encrypt. Ваш код работал бы намного лучше, если бы все три числа были одинаковыми.

...