openssl rsa加密签名

要使用rsa加密,本来准备在网上找rsa加密算法,但是找到的c源码都不太好用,后来搜索到openssl库有实现rsa算法的函数,就根据网上搜索的内容,自己封装了几个rsa加密API.

rsa算法原理说明网上有很多,大家可以自行搜索。

下面重点介绍openssl 下rsa加密的实现


参考文章:

http://blog.csdn.net/small_qch/article/details/19330211?utm_source=tuicool

http://www.cnblogs.com/aLittleBitCool/archive/2011/09/22/2185418.html

http://www.cppblog.com/sleepwom/archive/2010/01/11/105418.html

http://bbs.csdn.net/topics/360083130

http://blog.csdn.net/huyiyang2010/article/details/38066273

http://wenku.baidu.com/link?url=y-KjF6NakXZHVGYdjjcM6nRyyjLGZM43B7TbQRAMv2wMLNbdwSlXrrPGZ-RJEFCPNt5qMMtgIupK6qmB7rWZtJ6PhSZfF7i28vHYZohhCSO

http://bbs.csdn.net/topics/290034327

http://blog.csdn.net/sagely/article/details/367125


根据网上搜索及自己亲自代码调试,完成rsa加解密签名

1:输入命令,生成公钥和私钥(1024位)
openssl genrsa -out prikey.pem 1024
openssl rsa -in privkey.pem -pubout -out pubkey.pem

2.  c代码实现
/*
rsa.h
openssl genrsa -out prikey.pem 1024
openssl rsa -in prikey.pem -pubout -out pubkey.pem
*/
#include 
    
    
     
     
/*my_rsa_public_encrypt公钥加密与my_rsa_public_encrypt公钥解密配对
	公钥加密,读取pubkey.pem来做加密
	入参filename,保存公钥的文件名称,src待加密数据,加密数据长度
	出参des加密后数据,deslen加密数据长度
	src长度大于公钥长度时(RSA_size),会分段加密。
	加密结果des比src长度大,所以需要给des分配比src更大的空间
	例如密钥长度(RSA_size)为128,src长度为1~117,加密结果为128个字节。src长度为118~234,加密结果为256字节
*/
int my_rsa_public_encrypt(char *filename,unsigned char *src,int srclen,unsigned char *des,int *deslen);
/*私钥解密,读取prikey.pem来做解密
入参filename,保存公钥的文件名称,src待解密数据,srclen解密数据长度
出参des解密后数据,deslen解密数据长度*/
int my_rsa_prikey_decrypt(char *filename,unsigned char *src,int srclen,unsigned char *des,int *deslen);



/*my_rsa_prikey_encrypt私钥加密与my_rsa_public_decrypt公钥解密配对
	私钥加密,读取prikey.pem来做加密。
	入参filename,保存公钥的文件名称,src待加密数据,加密数据长度
	出参des加密后数据,deslen加密数据长度
	src长度大于公钥长度时(RSA_size),会分段加密。
	加密结果des比src长度大,所以需要给des分配比src更大的空间
	例如密钥长度(RSA_size)为128,src长度为1~117,加密结果为128个字节。src长度为118~234,加密结果为256字节
	因此des的长度,应该比 RSA_size*(strlen(src)/(RSA_size-11)+1)大才行。
*/
int my_rsa_prikey_encrypt(char *filename,unsigned char *src,int srclen,unsigned char *des,int *deslen);
/*
	公钥解密,读取public.pem来做解密
	入参filename,保存公钥的文件名称,src待解密数据,srclen解密数据长度
	出参des解密后数据,deslen解密数据长度
*/
int my_rsa_public_decrypt(char *filename,unsigned char *src,int srclen,unsigned char *des,int *deslen);

/* my_rsa_prikey_sign私钥签名
	入参filename,私钥文件名称;
			src待签名数据;
			srclen待签名数据长度
	出参des签名结果,返回结果长度为秘钥长度值,需分配比秘钥长度更大的空间,以免内存越界
			deslen签名结果长
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值