- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
openssl非对称加密rsa算法
环境配置:
需要的环境
(1) OpenSSL源码
(2) PERL for win32
(3) Vc++ 依赖项:libeay32.lib,ssleay32.lib
用openssl命令制作生成密钥:
cd跳转到out32dll目录下
输入生成私钥的命令: openssl genrsa -out private.pem 1024
输入生成对应公钥的命令: openssl rsa -in private.pem -pubout -out public.pem
运行代码
#include stdlib.h
#include stdio.h
#include string.h
#include openssl/pem.h
#include openssl/rsa.h
/*
int RSA_public_encrypt(int flen, const unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
int RSA_private_encrypt(int flen, const unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
int RSA_public_decrypt(int flen, const unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
int RSA_private_decrypt(int flen, const unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
*/
int main()
{
// 原始明文
char plain[256]=啦啦啦啦啦;
// 用来存放密文
char encrypted[1024];
// 用来存放解密后的明文
char decrypted[1024];
// 公钥和私钥文件
const char* pub_key=public.pem;
const char* priv_key=private.pem;
// 明文输出
printf(%s\n,plain);
int len=strlen(plain);
// -------------------------------------------------------
// 利用公钥加密明文的过程
// -------------------------------------------------------
// 打开公钥文件
BIO *pBio = BIO_new_file(pub_key,r);
if(pBio==NULL){
printf(failed to open pub_key file %s!\n, pub_key);
return -1;
}
// 从文件中读取公钥
RSA* rsa1= PEM_read_bio_RSA_PUBKEY(pBio, NULL, NULL, NULL);
if(rsa1==NULL){
printf(unable to read public key!\n);
return -1;
}
BIO_free_all(pBio); //释放设备
// 用公钥加密
//code here
int outlen=RSA_public_encrypt(len, (unsigned char *)plain,(unsigned char *)encrypted, rsa1,RSA_PKCS1_PADDING);
// 输出加密后的密文 输出到文档txt
//code here
printf(%d\n,outlen);
encrypted[outlen]=\0;
printf(%s\n,encrypted);
FILE* fp=fopen(out.txt,w);
fwrite(encrypted,1,outlen,fp);
fclose(fp);
// -------------------------------------------------------
// 利用私钥解密密文的过程
// ------------------------------------
文档评论(0)