资源简介
1.该程序是基于OpenSSL的使用纯C语言来实现RSA加解密的,在Linux环境下开发完成,建议在Linux环境下使用(在Windows环境下需要自行修改);
2.该程序具有生成RSA密钥对、RSA公钥加密和RSA私钥解密的功能,支持手动输入密钥;
3.该程序支持不限长度的明文加密,支持256~4096长度的密钥,支持Crypto++密码库生成的RSA密钥对(公钥:X.509,私钥:PKCS#8);
4.该程序包中提供有可供二次开发的接口源文件和可在Linux下使用的.so动态链接库文件;
5.该程序包中提供了相应功能的测试小程序。
代码片段和文件信息
#include
#include
#include
#include
#include
/*-------------------------------------------------------
对公钥进行PEM格式化
-------------------------------------------------------*/
void PubKeyPEMFormat(char *pubkey)
{
char format_pubkey[4096] = {0};
char pub_tem[4096] = {0};
char *pub_begin = “-----BEGIN PUBLIC KEY-----\n“;
char *pub_end = “-----END PUBLIC KEY-----\n“;
char *check = strstr(pubkeypub_begin);
if(check)
{
return;
}
else
{
int nPublicKeyLen = strlen(pubkey);
int index = 0publength = 0;
memcpy(format_pubkeypub_begin27);
for(index = 0; index < nPublicKeyLen; index += 64)
{
memcpy(pub_tempubkey+index64);
strcat(format_pubkeypub_tem);
publength = strlen(format_pubkey);
format_pubkey[publength] = ‘\n‘;
}
strcat(format_pubkeypub_end);
memcpy(pubkeyformat_pubkeystrlen(format_pubkey));
}
}
/*-------------------------------------------------------
对私钥进行PKCS#8非加密的PEM格式化
-------------------------------------------------------*/
void PrivKeyPEMFormat(char *privkey)
{
char format_privkey[4096] = {0};
char priv_tem[4096] = {0};
char *priv_begin = “-----BEGIN PRIVATE KEY-----\n“;
char *priv_end = “-----END PRIVATE KEY-----\n“;
char *check = strstr(privkey priv_begin);
if(check)
{
return;
}
else
{
int nPrivateKeyLen = strlen(privkey);
int index = 0privlength = 0;
memcpy(format_privkeypriv_begin28);
for(index = 0; index < nPrivateKeyLen; index += 64)
{
memcpy(priv_temprivkey+index64);
strcat(format_privkeypriv_tem);
privlength = strlen(format_privkey);
format_privkey[privlength] = ‘\n‘;
}
strcat(format_privkeypriv_end);
memcpy(privkeyformat_privkeystrlen(format_privkey));
}
}
/*-------------------------------------------------------
通过公钥长度获取加密长度
-------------------------------------------------------*/
int getEncryptLengthByPubKey(int pubKeyLen)
{
int cryLen = 0; /*加密长度*/
switch (pubKeyLen)
{
case 138: /*256*/
cryLen = 256;
break;
case 182: /*512*/
cryLen = 512;
break;
case 272: /*1024*/
cryLen = 1024;
break;
case 451: /*2048*/
cryLen = 2048;
break;
case 800: /*4096*/
cryLen = 4096;
break;
default:
break;
}
return cryLen;
}
/*-------------------------------------------------------
根据私钥长度判断对应的加密长度,得出实际密文分段长度
-------------------------------------------------------*/
int getCipherRealLenByPriKey(int priKeyLen)
{
/*相应加密长度对应的每段密文长度*/
int SignleRealLen = 0;
if(priKeyLen == 319 || priKeyLen == 323) /*256*/
SignleRealLen = 32;
else if(priKeyLen == 518 || priKeyLen == 522) /*512*/
SignleRealLen = 64;
else if(priKeyLen == 912 || priKeyLen == 916) /*1024*/
SignleRealLen = 128;
else if(priKeyLen == 1700 || priKeyLen == 1704) /*2048*/
SignleRealLen = 256;
else if(priKeyLen == 3268 || priKeyLen == 3272) /*4096*/
SignleRealLen = 512;
return SignleRealLen;
}
/*--
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-01-29 15:19 RSA_c\
目录 0 2016-01-27 13:17 RSA_c\ThrClass\
目录 0 2016-01-27 13:17 RSA_c\ThrClass\lib\
文件 2576590 2015-11-11 18:46 RSA_c\ThrClass\lib\libcrypto.so
文件 2576590 2015-11-11 18:46 RSA_c\ThrClass\lib\libcrypto.so.1.0.0
文件 538134 2015-11-11 18:46 RSA_c\ThrClass\lib\libssl.so
文件 538134 2015-11-11 18:46 RSA_c\ThrClass\lib\libssl.so.1.0.0
文件 1928 2016-01-29 15:15 RSA_c\readme.txt
目录 0 2016-01-29 14:53 RSA_c\rsa_test_tools\
文件 2794 2016-01-29 14:16 RSA_c\rsa_test_tools\KeyFormatPKCS8.c
文件 14154 2016-01-29 14:34 RSA_c\rsa_test_tools\hs_RSA_test.c
文件 13681 2016-01-29 14:46 RSA_c\rsa_test_tools\rsa_encDec.c
文件 3841 2016-01-29 14:52 RSA_c\rsa_test_tools\rsa_genKey.c
文件 6446 2016-01-29 14:40 RSA_c\rsa_test_tools\rsa_so_tools.c
目录 0 2016-01-29 14:56 RSA_c\s_hsrsa\
文件 8716 2016-01-29 14:37 RSA_c\s_hsrsa\hs_rsa.c
文件 4786 2016-01-29 13:16 RSA_c\s_hsrsa\hs_rsa_tools.c
文件 31572 2016-01-29 14:56 RSA_c\s_hsrsa\libs_hsrsa.so
文件 1305 2015-11-11 18:45 RSA_c\s_hsrsa\makefile
目录 0 2016-01-29 13:56 RSA_c\src\
文件 835 2016-01-29 13:25 RSA_c\src\hs_rsa.h
文件 671 2016-01-27 14:08 RSA_c\src\hs_rsa_tools.h
相关资源
- 蓝桥杯c语言历年试题大全
- QT实现的聊天界面,好友列表,支持文
- C语言操作netcdf的安装文件
- svr-c语言和matlab代码.zip
- 用C语言实现谱减法
- 条形码识别系统c语言版
- STM32 电子密码锁设计,LCD12864显示C语
- c语言复习专用
- 谭浩强C语言程序设计第三版中文版
- C语言开发简单的学生成绩管理系统
- C语言实现了crontab表达式执行时间
- c语言快速入门简单概要
- nRF24L01P入门全面解析附带C语言程序
- C语言经典排序方法及动图演示
- C语言内存四区
- PS2键盘、鼠标与at89c51单片机的通信设
- 《严蔚敏:数据结构题集(C语言版)
- C语言键盘记录程序
- c语言版超级玛丽(经典游戏)
- 黄金矿工C语言
- c++贪吃蛇编程源代码论文设计c语言
- C语言大全(第四版)
- 小甲鱼C语言课件+源代码
- 江苏C语言二级试题真题集
- 水中机器鱼代码
- STC12C5410AD中文文档C语言版
- 家族关系查询系统
- C语言写的音乐播放器(含源码注释)
- 嵌入式web服务器boa_C语言/Python + HTML
- 《数据结构题集C语言版》严蔚敏,吴
评论
共有 条评论