您的位置:首页 > 运维架构

openSSL学习笔记 加密字符串

2009-12-29 16:14 405 查看
在精通PKI网络安全证技术与编程实现一书中的例子代码有错

原书

申明加密字符 char *msg="Hello OpenSSL";

rv=EVP_EncryptUpdate(&ctx,out,&outl,msg,strlen(msg));

在vc6++ 下编译不能通过

应改为

char msg[]="Hello OpenSSLjkljllkl";

rv=EVP_EncryptUpdate(&ctx,out,&outl,(const unsigned char *)msg,strlen(msg));

#include<stdio.h>
#include<evp.h>
#include<string.h>
#include<windows.h>
#include<x509.h>

void tEVP_Encrypt()
{
unsigned char key[EVP_MAX_KEY_LENGTH];
unsigned char iv[EVP_MAX_KEY_LENGTH];
EVP_CIPHER_CTX ctx;
unsigned char out[1024];
int outl;
int outltmp;
char msg[]="Hello OpenSSLjkljllkl";
int rv;
int i;

for(i=0;i<24;i++)
{
key[i]=i;
}
for (i=0;i<8;i++)
{
iv[i]=i;
}

EVP_CIPHER_CTX_init(&ctx);
rv=EVP_EncryptInit_ex(&ctx,EVP_des_ede3_cbc(),NULL,key,iv);
if(rv != 1){
printf("Err/n");
return;
}
rv=EVP_EncryptUpdate(&ctx,out,&outl,(const unsigned char *)msg,strlen(msg));
if (rv !=1)
{
printf("Err/n");
return;
}
rv=EVP_EncryptFinal_ex(&ctx,out+outl,&outltmp);
if (rv !=1)
{
printf("Err/n");
return;
}
outl=outl+outltmp;
printf("原文为:%S/n",msg);
printf("密文长度: %d/n密文数据:/n",outl);
for (i=0;i<outl;i++)
{
printf("0x%02x ",out[i]);
}
printf("/n");
}

int main(){
OpenSSL_add_all_algorithms();
tEVP_Encrypt();
return 0;
}


输出:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: