gpt4 book ai didi

c - AES_ctr128_encrypt() "Segmentation fault"(OpenSSL)

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:45 24 4
gpt4 key购买 nike

我需要使用 openssl 在 C 中解密一些密码文本(aes 128 ctr)编程,因为我使用的库版本不支持 aes ctr 的 EVP 我正在尝试使用 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"
}

段错误在指令 AES_ctr128_encrypt() 上,最后一个,而我期待“6bc1bee22e409f96e93d7e117393172a”作为纯文本(使用 printf("%02x", var[i]) 来打印它)

最佳答案

您的 AES key 是 256 位长。您告诉 AES_set_encrypt_key 它是 16 位。然后将 key 传递给 AES_ctr 128 _encrypt。如果所有这三个数字都相同,您的代码会工作得更好。

关于c - AES_ctr128_encrypt() "Segmentation fault"(OpenSSL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7051504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com