使用OpenSSL的AES_encrypt和AES_decrypt函数出问题
我做了两个接口,使用加密接口aes_encrypt_cli加密后,使用解密接口aes_decrypt_cli解密输出是乱码
下面是测试程序
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <openssl/aes.h> #include <fcntl.h> #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 ] <infile> <outfile> 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:%sn", strerror(errno)); exit(EXIT_FAILURE); } if (AES_set_encrypt_key(key, 128, &aes) < 0){ fprintf(stderr, "AES_set_encrypt_key errorn"); 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 errorn"); exit(1); } aes_decrypt_cli(in, out, &aes); write(wfd, out, strlen(out)); break; } break; } close(rfd); close(wfd); close(kfd); return 0; }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
不能用strlen测试吗?那怎么得到内容的大小呢?sizeof?
改过解密函数后还是有问题哦
解决了,测试函数里面还有错误
回复
不能用strlen是因为aes加密后的内容是二进制的,并不是文本,很可能会出现的。
那用sizeof可以了吗?
我能打个流汗的表情吗?两个函数里的内容一模一样。
再说加密后的内容也不能用strlen来测试长度吧,请传一个长度参数进去。
改过来后还是解密不出明文来哦
解决了,测试函数里面还有错误,已经改过来了,包括帖子里
你的aes_decrypt_cli函数中调用的是AES_encrypt , 没有使用AES_decrypt