资源简介
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语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论