2017-09-19 2 views
-1

J'ai trouvé une démo (wiki, github) mais cela ne fonctionne pas. Et courir le coup de code que j'écris se référer au code lien ci-dessus obtenu Segmentation fault(core dumped)Erreur de segmentation à l'aide d'AES/GCM avec les interfaces EVP

int main(int argc, char *argv[]){ 
    char *ciphertext; 
    char *key; 
    char *iv; 
    char *plaintext; 

    key = "AES256-GCM-KEY-1234567890abcdefg"; 
    iv = "8a9cef0205a3"; 
    ciphertext = "uatBMo8k7EAnDQuNK4CHASJerQZpCWv86PGditzdYnQV9uqotQ=="; 
    plaintext = ""; 

    decrypt(ciphertext, NULL, 0, NULL, key, iv, plaintext); 
    return 0; 
} 

int decrypt(unsigned char *ciphertext, unsigned char *aad, int aad_len, unsigned char *tag, unsigned char *key, unsigned char *iv, unsigned char *plaintext){ 
    EVP_CIPHER_CTX *ctx; 
    int len, ret; 
    ctx = EVP_CIPHER_CTX_new(); 
    EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN,strlen(iv),NULL); 
    EVP_DecryptInit_ex(ctx, NULL, NULL, key, iv); 
    EVP_DecryptUpdate(ctx,plaintext, &len, ciphertext, strlen(ciphertext));//"segmentation fault" 
    ret = EVP_DecryptFinal_ex(ctx, plaintext, &len); 
    EVP_CIPHER_CTX_free(ctx); 
    printf(ret > 0 ? "success!\n" : "failed!\n"); 
    return 0; 
} 

Je suis confus, comment utiliser cette api pour déchiffrer sans Authentifier?

+1

Vous ne définissez jamais le chiffrement sur AES/GCM; vous devriez avoir un appel à 'EVP_EncryptInit_ex' avec' EVP_aes_128_gcm' ou 'EVP_aes_256_gcm' quelque part. Voir également [Chiffrement et décryptage authentifiés par EVP] (http://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption) sur le wiki OpenSSL. – jww

+0

@jww oui! ça marche maintenant, je suis trop insouciant. Merci beaucoup! – pearzl

Répondre

0

Vous devez allouer de la mémoire à votre pointeur (tous)

key = malloc(sizeof(*key) * strlen("AES256-GCM-KEY-1234567890abcdefg") + 1); 

Vous devez compiler votre principal avec des drapeaux de thèses (si gcc est le compilateur): -W -Wall -Wextra il vous dira que votre pointeur sont non initialisée

+0

désolé j'ai fait une erreur sur le nom de la variable, ce n'est pas un problème de pointeur. @ Jww a résolu mon problème, mais merci quand même. – pearzl