信息安全课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息系统安全课程设计报告课题名称: OpenSSL 非对称加密
提交文档学生姓名:
提交文档学生学号:
同组成员名单:
指导教师姓名:
指导教师评阅成绩:
指导教师评阅意见:
.
.
提交报告时间: 2014年 6 月 10日
1.课程设计目标
了解OpenSSL非对称加密算法的背景知识,并实现加密解密。
2.分析与设计
(1)实现方法:
编程语言为C++语言。
编程方法:根据算法要求编写代码。
(2)利用OpenSSL命令制作生成密钥:
#include
#include
#include
#include
#include
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);
int outlen=RSA_public_encrypt(len, (unsigned char *)plain,(unsigned char *)encrypted, rsa1,RSA_PKCS1_PADDING);
printf("%d\n",outlen);
encrypted[outlen]='\0';
printf("%s\n",encrypted);
FILE* fp=fopen("out.txt","w");
fwrite(encrypted,1,outlen,fp);
fclose(fp);
pBio = BIO_new_file(priv_key,"r");
if(pBio==NULL){
printf("failed to open priv_key file %s!\n", pub_key);
return -1;
}
RSA *rsa2 = PEM_read_bio_RSAPrivateKey(pBio, NULL, NULL, NULL);
if(rsa2==NULL){
printf("unable to read private key!\n");
return -1;
}
BIO_free_all(pBio);
outlen=RSA_private_decrypt(outlen,(unsigned char *)encrypted,(unsigned char *)decrypted, rsa2,RSA_PKCS1_PADDING);
decrypted[outlen]='\0';
printf("%s\n",decrypted);
return 0;
}
(3)手动产生公钥:
#include
#include
#include
#include
#include
int main()
{
char plain[256]="rtre";
char encrypted[1024];
char decrypted[1024];
const char* pub_key="public2.pem";
const char* priv_key="private2.pem";
const int g_nBits = 1024;
printf("%s\n",plain);
int len=strlen(plain);
RSA *rsa1 = RSA_generate_key(g_nBits,RSA_F4,NULL,NULL);
if (rsa1 == NULL)
{
printf("rsa_generate_key error\n");
return -1;
}
BIO *pBio = BIO_new_file(pub_key,"w");
if (pBio == NULL)
{
printf("BIO_new_file %s error\n", pub_key);
return -1;
}
PEM_write_bio_RSAPublicKey(pBio,rsa1);
BIO_free_all(pBio);
int outlen=RSA_public_encrypt(len, (unsigned char *)plain,(unsigned char *)encrypted, rsa1,RSA_PKCS1_PADDING);
printf("%d\n",outlen);
encrypted[outlen]='\0';
printf("%s\n",encrypted);
FILE* fp=fopen("out.txt","w");
fwrite(encrypted,1,outlen,fp);
fclose(fp);
pBio = BIO_new_file(priv_key,"w");
if (pBio == NULL)
{
printf("BIO_new_file %s error\n", priv_key);
return -1;
}