关于openssl AES/ECB/PKCS5Padding加密 求助
各位高手们,小弟最近需要做一个用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;
}
...全文
相关推荐
AES/ECB/PKCS5Padding C++实现
AES/ECB/PKCS5Padding C++实现
使用openssl中aes加密算法实现文件的加密解密(源代码)
实现EVP_aes_128(256)_ecb模式,适合初学者熟悉openssl中的加密解密函数。可运行..
C++和JAVA,AES/ECB/PKCS5Padding 互通
关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题一点小见解和代码。 有需要的可以下载一下。
AES-128 ECB pkcs5padding
c++ AES 加密
对接java AES/ECB/PKCS7Padding加密
在对接java开发的加密方法,整理的PHP 对接java AES/ECB/PKCS7Padding加密转16进制字符串,加解密方法


