使用openssl中的EVP通用加密算法接口之--加密测试例子
2014-01-22 16:46
609 查看
/*********************************************************************
* Author : Samson
* Date : 01/22/2014
* Test platform:
* 3.6.10-4.fc18.i686.PAE
* GNU bash, version 4.2.39
* *******************************************************************/
此测试例子是使用的openssl库中提供的EVP系列函数对数据进行加密的一个测试,选择的算法为:AES128,加密模式为:CBC,此加密算法模式下需要的参数为:16字节的加密key,16字节的IV(初始化向量),数据的长度根据需要对宏DATA_LEN进行修改。若是要选择其它的算法,请自己man一下相关的函数接口是否存在。例如要使用的算法为AES192 CBC的算法的话,那么在下面加红的那句中把 rv = EVP_EncryptInit_ex(&ctx,
EVP_aes_128_cbc(),NULL, key, iv); 中的EVP_aes_128_cbc修改为EVP_aes_192_cbc,但是对应的参数也要进行相应长度的值的输入,EVP_aes_192_cbc算法的加密key的长度应该为24字节,IV的长度还是16字节,这个具体算法要根据具体算法进行参数的输入,进行举一反三。
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <resolv.h>
#include <stdlib.h>
#include <unistd.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/x509.h>
#define DATA_LEN 32
#define EVP_MAX_KEY_LENGHT 64
int main()
{
EVP_CIPHER_CTX ctx;
unsigned char key[EVP_MAX_KEY_LENGHT] = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0\x61\x1b\xbb\x3e\x20\x25\xa4\x5a";
unsigned char iv[EVP_MAX_KEY_LENGHT] = "\x56\x2e\x17\x99\x6d\x09\x3d\x28\xdd\xb3\xba\x69\x5a\x2e\x6f\x58";
unsigned char out[1024] = {0};
int outl, tmp, i;
unsigned char msg[1024] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f";
int rv;
OpenSSL_add_all_algorithms();
EVP_CIPHER_CTX_init(&ctx);
rv = EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(),NULL, key, iv);
if(rv != 1)
{
printf("Error");
return -1;
}
outl = 0;
rv = EVP_EncryptUpdate(&ctx, out, &outl, msg, DATA_LEN);
if(rv != 1)
{
printf("Error");
return -1;
}
rv = EVP_EncryptFinal_ex(&ctx, out + outl, &tmp);
outl = outl + tmp;
printf("----cipher_algo is AES128 cipher_mode is CBC enc outdata is :-----------\n");
for(i = 0; i < DATA_LEN; i++)
printf("%02x ", out[i]);
printf("\r\n");
return 0;
}
编译:
[ufo@localhost fuck]$ gcc testenc_evp.c -Wall -g -lssl -lcrypto -o testenc
测试结果:
[ufo@localhost fuck]$ ./testenc
----cipher_algo is AES128 cipher_mode is CBC enc outdata is :-----------
d2 96 cd 94 c2 cc cf 8a 3a 86 30 28 b5 e1 dc 0a 75 86 60 2d 25 3c ff f9 1b 82 66 be a6 d6 1a b1
* Author : Samson
* Date : 01/22/2014
* Test platform:
* 3.6.10-4.fc18.i686.PAE
* GNU bash, version 4.2.39
* *******************************************************************/
此测试例子是使用的openssl库中提供的EVP系列函数对数据进行加密的一个测试,选择的算法为:AES128,加密模式为:CBC,此加密算法模式下需要的参数为:16字节的加密key,16字节的IV(初始化向量),数据的长度根据需要对宏DATA_LEN进行修改。若是要选择其它的算法,请自己man一下相关的函数接口是否存在。例如要使用的算法为AES192 CBC的算法的话,那么在下面加红的那句中把 rv = EVP_EncryptInit_ex(&ctx,
EVP_aes_128_cbc(),NULL, key, iv); 中的EVP_aes_128_cbc修改为EVP_aes_192_cbc,但是对应的参数也要进行相应长度的值的输入,EVP_aes_192_cbc算法的加密key的长度应该为24字节,IV的长度还是16字节,这个具体算法要根据具体算法进行参数的输入,进行举一反三。
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <resolv.h>
#include <stdlib.h>
#include <unistd.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/x509.h>
#define DATA_LEN 32
#define EVP_MAX_KEY_LENGHT 64
int main()
{
EVP_CIPHER_CTX ctx;
unsigned char key[EVP_MAX_KEY_LENGHT] = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0\x61\x1b\xbb\x3e\x20\x25\xa4\x5a";
unsigned char iv[EVP_MAX_KEY_LENGHT] = "\x56\x2e\x17\x99\x6d\x09\x3d\x28\xdd\xb3\xba\x69\x5a\x2e\x6f\x58";
unsigned char out[1024] = {0};
int outl, tmp, i;
unsigned char msg[1024] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f";
int rv;
OpenSSL_add_all_algorithms();
EVP_CIPHER_CTX_init(&ctx);
rv = EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(),NULL, key, iv);
if(rv != 1)
{
printf("Error");
return -1;
}
outl = 0;
rv = EVP_EncryptUpdate(&ctx, out, &outl, msg, DATA_LEN);
if(rv != 1)
{
printf("Error");
return -1;
}
rv = EVP_EncryptFinal_ex(&ctx, out + outl, &tmp);
outl = outl + tmp;
printf("----cipher_algo is AES128 cipher_mode is CBC enc outdata is :-----------\n");
for(i = 0; i < DATA_LEN; i++)
printf("%02x ", out[i]);
printf("\r\n");
return 0;
}
编译:
[ufo@localhost fuck]$ gcc testenc_evp.c -Wall -g -lssl -lcrypto -o testenc
测试结果:
[ufo@localhost fuck]$ ./testenc
----cipher_algo is AES128 cipher_mode is CBC enc outdata is :-----------
d2 96 cd 94 c2 cc cf 8a 3a 86 30 28 b5 e1 dc 0a 75 86 60 2d 25 3c ff f9 1b 82 66 be a6 d6 1a b1
相关文章推荐
- 使用openssl中的EVP通用加密算法接口的之--hash散列运算测试例子
- 使用openssl中的EVP通用加密算法接口的之--解密测试例子
- 使用openssl进行ssl/tls加密传输会话测试
- 使用openssl中的加密函数AES、RC4、RSA对文件加密的一个例子
- 使用openssl中的加密函数AES、RC4、RSA对文件加密的一个例子
- 使用openssl中的加密函数AES、RC4、RSA对文件加密的一个例子
- 使用jmeter进行接口压力测试的一个简单例子
- 在IDEA中,测试某个类中的接口 使用快捷键生成Junit4测试类
- 前端接口自动化测试工具-DOClever(免费开源的接口管理平台)使用介绍
- 使用Python的OpenSSL库来进行RSA加密
- phoenixframe自动化平台使用多批次数据做接口测试的方法
- 使用Jmeter进行http接口测试
- AES加密和解密——使用openssl编程
- PHP 使用openssl 进行加密 解密
- jmeter接口测试基本使用
- Spring boot CommandLineRunner接口使用例子
- openssl 非对称加密DSA,RSA区别与使用介绍(转)
- jmeter bean shell断言加密的响应信息(加密接口测试二)
- linux下安装openssl和调用openssl接口(经过本人测试)