使用openssl的AES_encrypt加解密出问题

来源:互联网  时间:2016/7/13 1:23:19

关于网友提出的“ 使用openssl的AES_encrypt加解密出问题”问题疑问,本网通过在网上对“ 使用openssl的AES_encrypt加解密出问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 使用openssl的AES_encrypt加解密出问题
描述:

本帖最后由 Gfeng168 于 2014-11-10 11:54:15 编辑

openssl解密加密

我做了两个接口,使用加密接口aes_encrypt_cli加密后,使用解密接口aes_decrypt_cli解密输出是乱码
int     aes_encrypt_cli(const char *in, char *out, AES_KEY *aes)
{
    if(!in || !out || !aes)
        return(-1);
    int     in_len, en_len;
    in_len = strlen(tin), en_len = 0;
    while(en_len < in_len){
        AES_encrypt((unsigned char*)in, (unsigned char*)out, aes);
        in += AES_BLOCK_SIZE;
        out += AES_BLOCK_SIZE;
        en_len += AES_BLOCK_SIZE;
    }
}
int     aes_decrypt_cli(const char *in, char *out, AES_KEY *aes)
{
    if(!in || !out || !aes)
        return(-1);
    int     in_len, de_len;
    in_len = strlen(in), de_len = 0;
    while(de_len < in_len){
        AES_decrypt((unsigned char*)in, (unsigned char*)out, aes);
        in += AES_BLOCK_SIZE;
        out += AES_BLOCK_SIZE;
        de_len += AES_BLOCK_SIZE;
    }
}

下面是测试程序
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define     NBUFF   4096
int main(int argc, char *argv[])
{
    AES_KEY     aes;
    unsigned char    key[AES_BLOCK_SIZE];
    unsigned char    in[NBUFF], out[NBUFF];
    unsigned char    iv[AES_BLOCK_SIZE];
    int     rfd, wfd, kfd, nread, n;
    unsigned char   c;
    if (argc != 4){
        printf("usage: a.out [ -e ] [ -d ]   \n");
        exit(EXIT_FAILURE);
    }
  
    rfd = open(argv[2], O_RDONLY, 0);
    wfd = open(argv[3], O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
    kfd = open("key", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
    nread = read(rfd, in, NBUFF);
    while((c = getopt(argc, argv, "ed")) != -1){
        switch(c){
            case 'e':
                   if (create_key(key, AES_BLOCK_SIZE) < 0){
                           fprintf(stderr, "create key error:%s\n", strerror(errno));
                           exit(EXIT_FAILURE);
                 }
                if (AES_set_encrypt_key(key, 128, &aes) < 0){
                          fprintf(stderr, "AES_set_encrypt_key error\n");
                          exit(1);
                 }
                write(kfd, key, AES_BLOCK_SIZE);    //如果加密,将密钥写入key文件
                aes_encrypt_cli(in, out, &aes);
                write(wfd, out, strlen(out));
                break;
            case 'd':
                read(kfd, key, AES_BLOCK_SIZE);     //如果是解密,从key文件读出密钥
                if (AES_set_decrypt_key(key, 128, &aes) < 0){
                          fprintf(stderr, "AES_set_encrypt_key error\n");
                          exit(1);
                 }
                aes_decrypt_cli(in, out,  &aes);
                write(wfd, out, strlen(out));
                break;
        }
        break;
    }
    close(rfd);
    close(wfd);
    close(kfd);
    return 0;
}

上一篇为什么输入975还能通过,不显示出错误
下一篇多线程找不到Segmentation fault错误原因
明星图片
相关文章
《 使用openssl的AES_encrypt加解密出问题》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)