关于openssl AES/ECB/PKCS5Padding加密 求助

hermitbin hermitbin 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位高手们,小弟最近需要做一个用AES/ECB/PKCS5Padding加密的代码,跑在嵌入式linux平台上,平台已经移植了openssl,我写了下面一个基于openssl的AES/ECB/PKCS5Padding加密函数,但最终加密后的结果不对,请各位帮忙看下哪的问题,谢谢各位高手了


#include "openssl/aes.h"

#define AES_DEBUG

int ez_AES_ecb_encrypt_PKCS5Padding(const char *in, char *out, const unsigned char *key, const int keybits){
AES_KEY aes;
unsigned char *input_string;
unsigned char *encrypt_string;
unsigned int surplus_len;
char b, *tmp_out;
const char *tmp_in;
int encrypt_quit = 0;
if(in == NULL || out == NULL){
#ifdef AES_DEBUG
printf("[%s] [%d] \"in\" or \"out\" point error!!\n", __FILE__, __LINE__);
#endif
}
input_string = (unsigned char*)calloc(AES_BLOCK_SIZE, sizeof(unsigned char));
if (input_string == NULL) {
fprintf(stderr, "Unable to allocate memory for input_string\n");
exit(-1);
}

encrypt_string = (unsigned char*)calloc(AES_BLOCK_SIZE, sizeof(unsigned char));
if (encrypt_string == NULL) {
fprintf(stderr, "Unable to allocate memory for encrypt_string\n");
return -1;
}
memset(encrypt_string, 0, AES_BLOCK_SIZE);
// set encrypt key
if (AES_set_encrypt_key(key, keybits, &aes) < 0) {
fprintf(stderr, "Unable to set encryption key in AES\n");
return -1;
}
tmp_in = in;
tmp_out = out;
while(!encrypt_quit){
if(strlen(tmp_in) == 0){
surplus_len = AES_BLOCK_SIZE;
b = '\0'+surplus_len;
memset(input_string, b, AES_BLOCK_SIZE);
encrypt_quit = 1;
}else if(strlen(tmp_in)/AES_BLOCK_SIZE > 0){
memcpy(input_string, tmp_in, AES_BLOCK_SIZE);
}else{
surplus_len = strlen(tmp_in)%AES_BLOCK_SIZE;
b = '\0'+surplus_len;
memset(input_string, b, AES_BLOCK_SIZE);
memcpy(input_string, tmp_in, strlen(tmp_in));
encrypt_quit = 1;
}
#ifdef AES_DEBUG
printf("input_string: %s\n", input_string);
#endif
memset(encrypt_string, 0, AES_BLOCK_SIZE);
AES_ecb_encrypt(input_string, encrypt_string, &aes, AES_ENCRYPT);
#ifdef AES_DEBUG
printf("encrypt_string: %s\n", encrypt_string);
#endif
memcpy(tmp_out, encrypt_string, AES_BLOCK_SIZE);
tmp_out += AES_BLOCK_SIZE;
tmp_in += AES_BLOCK_SIZE;
}
free(input_string);
free(encrypt_string);
return 0;
}

...全文
评论 4
收藏 已收藏
分享
返回顶部
hermitbin
C语言 70,039 成员 243,237 内容