Openssl-RSA文档
更新时间:2024-01-24 05:04:01 阅读量: 教育文库 文档下载
基于OpenSSL库实现RSA加解密、签名认证
RSA简介
RSA是一种公钥算法,可以用来实现数字签名,身份认证,以及密钥交换。这里主要讨论数字签名的过程。 准备工作
(1)OpenSSL的配置:
安装,编译OpenSSL文件,生成静态库文件(也可以选择生成动态链接库,下文所使用的均为静态调用)。 (2)编译器:Visual C++ 6.0
将第(1)步生成的文件加入编译器的目录中 主要数据结构以及函数
1、RSA数据结构,其中包含公私钥信息,如果只有n和e则表明是公钥。 typedefstructrsa_st RSA; structrsa_st {
const RSA_METHOD *meth; //OpenSSL默认的RSA加解密算法 ENGINE *engine; BIGNUM *n; BIGNUM *e; BIGNUM *d; BIGNUM *p; BIGNUM *q;
//模数n
//公钥指数e,通常为RSA_3(3)或RSA_F4(65537) //私钥指数d //大素数p //大素数q
BIGNUM *dmp1; BIGNUM *dmq1; BIGNUM *iqmp;
CRYPTO_EX_DATA ex_data; int references; };
2、BIGNUM:OpenSSL定义的数据类型,用来抽象表示一个大数。 3、intRSA_new():生成一个RSA结构,并采用默认的rsa_pkcs1_eay_meth RSA_METHOD算法。成功返回1,失败返回-1。
4、intBN_new();生成一个BIGNUM结构,成功返回1,失败返回-1。 5、int BN_set_word(BIGNUM *a, BN_ULONG w);将BIGNUM结构的值置为unsigned long int类型整数的值。成功返回1,失败返回-1。
6、int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
参数分别为:RSA结构,bits为生成密钥的长度,公开指数e,一般为NULL。 作用:根据密钥长度和公钥指数生成密钥。 7、RSA_FREE();释放RSA结构。
8、int RSA_print_fp(FILE *fp, const RSA *r,int offset); 参数分别为;文件指针*fp,RSA结构,打印偏移量。 作用:将生成的密钥输出到文件。
9、int RSA_check_key(const RSA *);检查RSA结构中n,e,d,p,q是否满足条件。满足返回1,否则返回-1;
10、intRSA_size(const RSA *);返回RSA结构中密钥的长度 11、加解密函数:
int RSA_public_encrypt(intflen, const unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
int RSA_private_encrypt(intflen, const unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
int RSA_public_decrypt(intflen, const unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
int RSA_private_decrypt(intflen, const unsigned char *from,
unsigned char *to, RSA *rsa,int padding);
flen表示加解密的数据长度;*from为加密前的信息;*to为加密后的信息;*out为解密后的信息;
加密时padding表示填充方式,解密时padding表示去除填充的方式; 12、签名函数
intRSA_sign(int type, const unsigned char *m, unsigned intm_length,
unsigned char *sigret, unsigned int *siglen, RSA *rsa);
参数:type为摘要数据使用的摘要算法,
作用:将需要运算的数据放入X509_ALGOR数据结构并将其DER编码,对编码结果做RSA_PKCS1_PADDING再进行私钥加密。
13、验签函数
intRSA_verify(int type, const unsigned char *m, unsigned intm_length,
const unsigned char *sigbuf, unsigned intsiglen, RSA *rsa);
示例程序
1、密钥生成
程序只给出了生成密钥的步骤,对于密钥如何存储和分配并未涉及。 2、加密&解密
加解密填充模式和解密时的去填充模式是对应的。 填充模式的选择根据RSA加密标准来确定。
程序中只是演示对一个分组加解密的操作,实际使用应对明文进行分块然后在加密。 3、签名&验签
RSA_sign(nid,data,datalen,signret,&signlen,r)将需要运算的数据放入X509_ALGOR数据结构并将其DER编码,对编码结果做RSA_PKCS1_PADDING再进行私钥加密。
样例程序并不是真正的签名示例,因为样例只是将数据直接拿来运算。 要进行签名认证的完整操作,首先用sha.h中的算法对数据进行摘要,然后调用RSA_sign来进行签名。
正在阅读:
Openssl-RSA文档01-24
《重生》观后感04-02
外国新闻事业史名词解释07-24
销售经理强化训练营(课程资料)03-12
(清华大学版)财务管理实验及EXCEL应用指导课后习题详解 - 图文10-30
山东省聊城市2018届高三一模文综地理试题【解析】06-06
2019年“法制宣传进校园”活动工作简报word版本(2页)03-18
用SPSS软件对物流08班的《营销策划》试卷进行统计分析09-23
openWRT学习01-04
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- Openssl
- 文档
- RSA