环境
- win10
- vs2012
- openssl oomake版本
踩坑
-
32位和64位的区别
vs2012生成的是32位的项目,不要使用64位的openssl!不要使用64位的openssl!不要使用64位的openssl!(这个bug搞了好久就是搞不出来,后来换了32位才好一点 -
我找不到libeay.lib和ssleay.lib怎么办
openssl1.10版本对上面两个lib进行了修改,分别改名:libcrypto和libssl,导入这两个就可以了
正确步骤
- 下载vs2012
- 下载openssl1.10的32位版本
- 创建一个控制台空项目
- 对项目属性进行如下的设置
1:右击工程名 ——> 选择“属性”
2:在“VC++目录”——> “包含目录”中添加openSSL的include文件地址(在你安装openssl的文件下)
3:在“VC++目录”——> “库目录”中添加openSSL的lib文件地址(在你安装openssl的文件下)
4:在“链接器”——>“输入”——>“附加依赖项”中添加libssl.lib和libcrypto.lib(键盘输入);
5:将OpenSSL安装目录下bin文件夹中的“libcrypto-1_1-x64.dll”和“libssl-1_1-x64.dll”\
(名字后面的版本号可能因更新而不同)复制到你新建的项目工程目录下
附上一段测试代码
#include <stdio.h>
#include <openssl/aes.h>
#include <stdlib.h>
#include <string.h>
int main()
{
unsigned char key[16+1] = "my-key-i-choosed"; // 128bits key (应该是真正的随机数才好)
char pt1[16+5+1] = "0123456789abcdef12345"; // 明文
char ct[16+5+1]; // 密文
char pt2[16+5+1]; // 解密后的明文
AES_KEY k;
unsigned char iv1[16+1] = {"1023456789abcdef"}; // 16+1,加密用
unsigned char iv2[16+1] = {"1023456789abcdef"}; // 16+1,解密用
{ // single blcok test
AES_set_encrypt_key(key, 16*8, &k);
AES_encrypt((unsigned char*)pt1, (unsigned char*)ct, &k);
AES_set_decrypt_key(key, 16*8, &k);
AES_decrypt((unsigned char*)ct, (unsigned char*)pt2, &k);
if (memcmp(pt1, pt2, 16)==0)
puts("AES block ok");
else
puts("AES block err");
}
{ // cfb mode (stream mode)
int num=0;
AES_set_encrypt_key(key, 16*8, &k);
AES_cfb128_encrypt((unsigned char*)pt1, (unsigned char*)ct,
16+5, &k, (unsigned char*)iv1, &num, AES_ENCRYPT);
num=0;
AES_set_encrypt_key(key, 16*8, &k); // MUST as enc
AES_cfb128_encrypt((unsigned char*)ct, (unsigned char*)pt2,
16+5, &k, (unsigned char*)iv2, &num, AES_DECRYPT);
if (memcmp(pt1, pt2, 16+5)==0)
puts("AES CFB mode ok");
else
puts("AES CFB mode err");
}
system("pause");
return 0;
}
网友评论