关于利用openssl中AES加密

taylorshuang 2013-08-20 06:06:41
自己做实验用到了openssl中对称加密算法,感觉网上关于openssl的API教程很少,自己遇到一个奇怪的问题,利用AES_encrypt()加密,和AES_decrypt解密的结果不一样,大家,谁知道怎么回事么
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <openssl/aes.h>


void main(){
char *key_string = "123456";
AES_KEY aes;
int i = 0;
char * out1 = malloc(16);
char * out2 = malloc(16);
memset(out1,0,16);
memset(out2,0,16);
if (AES_set_encrypt_key(key_string, 128, &aes) < 0) {
fprintf(stderr, "Unable to set encryption key in AES\n");
exit(-1);
}
char temp[16] = "ABCDEDDFDSGFRSFG";
AES_encrypt(temp,out1,&aes);
for(i= 0;i < 16;i+=2){
printf("%x",out1[i]);
}
printf("\n");
AES_decrypt(out1,out2,&aes);
printf("temp=%s\n,out2 = %s\n",temp,out2);
}


另外提供一个关于openssl AES api接口介绍http://blog.csdn.net/sunspider107/article/details/7375816
...全文
380 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010599631 2014-01-10
  • 打赏
  • 举报
回复
void main() 
{   
    char *key_string = "123456";
    AES_KEY  aes;
    int i = 0;
    unsigned char out1[16];
    unsigned char out2[16];
    memset(out1,0,16);
    memset(out2,0,16);
    if (AES_set_encrypt_key((unsigned char*)key_string, 128, &aes) < 0) {
        fprintf(stderr, "Unable to set encryption key in AES\n");
        exit(-1);
    }
    char temp[16] = "ABCDEDDFDSGFRSF";
    AES_encrypt((unsigned char*)temp,out1,&aes);
    for(i= 0;i < 16;i+=2){
        printf("%x",out1[i]);
    }
    printf("\n");
    if (AES_set_decrypt_key((unsigned char*)key_string, 128, &aes) < 0) {
        fprintf(stderr, "Unable to set encryption key in AES\n");
        exit(-1);
    }
    AES_decrypt(out1,out2,&aes);
    printf("temp=%s\nout2=%s\n",temp,out2);
}
兄台,你没发现你少了点什么吗? 解码虽然用同一个密钥,但是要生成解码密钥才行,你少调用了这个:AES_set_decrypt_key 另外,楼上说你溢出也是对的,上面的代码,我跑过了,OK!
linxren 2013-08-26
  • 打赏
  • 举报
回复
char temp[16] = "ABCDEDDFDSGFRSFG"; 这句有问题,溢出了。而且,printf("temp=%s\n,out2 = %s\n",temp,out2);也不对,你只申请了16个字节。'\0'没地方放。
taylorshuang 2013-08-21
  • 打赏
  • 举报
回复
我用AES_cbc_encrypt可以获得正确的结果,AES_encrypt,我再测试下看看
5t4rk 2013-08-20
  • 打赏
  • 举报
回复
AES是对称算法。解密不会不一样的。 你确定密钥和函数都是正确的

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧