c++的RSA

所有回答(1)
没有,得自己写.自己写的关键点是搞清楚不同平台下的默认加密模式,填充模式.主要就是这两个参数造成java,C#,C++在使用默认参数加解密时可能无法互通.
园豆:38264
&&&您需要以后才能回答,未注册用户请先。RSA算法实现(C++)
[问题点数:40分]
RSA算法实现(C++)
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2009年4月 Linux/Unix社区大版内专家分月排行榜第三
2009年4月 Linux/Unix社区大版内专家分月排行榜第三
2009年4月 Linux/Unix社区大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2009年4月 Linux/Unix社区大版内专家分月排行榜第三
2013年5月 高性能开发大版内专家分月排行榜第二2013年4月 高性能开发大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。1559人阅读
加密的demo。
的源码给我。
加密,我十分迷茫。
的错误。查了好多资料,最后加上一个applink.c似乎搞定了,但是无法移植。一下子我陷入了僵局,似乎不知道该如何往下面走了。
文件没有加载好,导致出现了update的错误。
似乎只支持key文件。。
也有函数支持读取证书文件的。只是我当时时间比较紧,没有仔细去钻研了。
下所有key文件,并将这些key文件加载到内存中,加密时,根据传入的key文件名称选择对应的key加密。
1、linux目录下的所有文件:
解决方式:
(1)手动添加:
这种方式是在代码中手动列出所有的key文件,将key文件依次读入内存中。
2&&& //文件数量
* rsa_key[NUM_KEY] =&&
"/etc/upps/privatekey.key",
"/etc/upps/mepf_privatekey.key",
"/etc/upps/privatekey12.key"
(i=0; i&NUM_KEY; i++)
RsaKeyFile[i].pKey = load_key(bio_err, rsa_key[i], keyform, 0, passin, 0, "Private Key");&& //文件
strcpy(RsaKeyFile[i].path,rsa_key[i]);
缺点:这种方式调用key需要手动添加key文件,每次增加一个key,需要更新数量。
(2)自动读取目录下的所有key。
计算目录下的所有key文件数量,并将key 文件名称保存起来。
struct KeyPath&& //将key的文件名称和RSA指针,EVP_PKEY指针对应起来。
&&&&&&&& RSA* gRsaK
&&&&&&&& EVP_PKEY* pK
&&&&&&&& char path[1024];
}RsaKeyFile[500];
int keyofNum = 0;&& //存放key的数量
#ifndef WIN32
//获取key文件数量
int getfilecount(char *path)&&
&&&&&&&& DIR *&&
&&&&&&&& int count = 0;
& struct dirent *s_&&
& struct& stat file_&&&&&&&&&
&&&&&&&& char currfile[1024]={0};&&
&&&&&&&& int len = strlen(path);
&&&&&&&& if(path[len-1] != '/')
&&&&&&&& {
&&&&&&&&&&&&&&&&&& path[len] = '/';
&&&&&&&&&&&&&&&&&& path[len+1] = 0;
&&&&&&&& }
&&&&&&&& printf("%s/n",path);
&&&&&&&& if( (dir=opendir(path)) == NULL)
&&&&&&&& {&&
&&&&&&&&&&&&&&&&&& printf("opendir(path) error./n");&&
&&&&&&&&&&&&&&&&&& return -1;&&
&&&&&&&& }&&
&& while((s_dir=readdir(dir))!=NULL)&&
&&&&&&&& &{&&
&&&&&&& if((strcmp(s_dir-&d_name,".")==0)||(strcmp(s_dir-&d_name,"..")==0))&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&& sprintf(currfile,"%s%s",path,s_dir-&d_name);&&
&&&&&&& stat(currfile,&file_stat);&&
&&&&&&& if(S_ISDIR(file_stat.st_mode))& ;
&&&&& &&&& if(IsKeyFile(currfile))
&&&&& &&&& {
&&&&&&&&&&&&& printf("%s/tOK/n",currfile);
&&&&&&&&&&&&&&&&&&&&&&&&&&& &&& &&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& && &&&&&&&&&&&&&&&&&&&& printf("数量:%d",count);
&&&&&&&&&&&&&&&&&&&&&&&&&&& && &&&&&&&&&&&&&&&&&&&& strcpy(RsaKeyFile[count].path,currfile);//保存key的文件名。
&&&&&&&&&&&&&&&&&&&&&&&&&&& && &&&&&&&&&&&&&&&&&&&& count++;
&&&&&&&&&&&&&&&&&& }
&&&&& &&&& closedir(dir);&&
&&&&&&&& & //获取key的数量。
//判断文件后缀是否为.key
int IsKeyFile(char *filePath)
&&&&&&&& char *ptr = NULL;
&&&&&&&& //printf("文件路径%s,文件路径长度%d/n",filePath,strlen(filePath));
&&&&&&&& ptr = strstr (filePath,".key");
&&&&&&&& if(ptr != NULL )
&&&&&&&&&&&&&&&&&& return 1;
&&&&&&&& else
&&&&&&&&&&&&&&&&&& return 0;
保存key的数量,将key文件名称与RSA 和EVP_PKEY对应起来。
keyofNum = && getfilecount("/etc/upps/");
for(i=0; i& i++)
&&&&&&&& RsaKeyFile[i].pKey = load_key(bio_err, RsaKeyFile[i].path, keyform, 0, passin, 0, "Private Key");
&&&&&&&& //strcpy(RsaKeyFile[i].path,rsa_key[i]);
for(i=0;i&i++)
&&&&&&&& RsaKeyFile[i].gRsaKey =& EVP_PKEY_get1_RSA(RsaKeyFile[i].pKey);
&&&&&&&& EVP_PKEY_free(RsaKeyFile[i].pKey);
私钥加密,根据路径选择RSA KEY。
__DLL_EXPORT__ int tsRSAPrivateEncrypt(unsigned char *input, unsigned char *output,char* path)
&&&&&&&& keysize = RSA_size(RsaKeyFile[1].gRsaKey);
&&&&&&&& rsa_in = OPENSSL_malloc(keysize * 2);
&&&&&&&& rsa_out = OPENSSL_malloc(keysize);
&&&&&&&& for(i=0; i&keyofN i++)
&&&&&&&& {
&&&&&&&&&&&&&&&&&& if(strcmp(path,RsaKeyFile[i].path) == 0)
&&&&&&&&&&&&&&&&&& rsa_outlen& = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, RsaKeyFile[i].gRsaKey, RSA_PKCS1_PADDING);
&&&&&&&& }
第二种方式显然比第一种要更好,它能自动读取/etc/upps/目录下所有的文件,并实现自动加载,自动设别key的功能。
代码的问题:
tsRSAPrivateEncrypt可能会出现问题,当目录下只有一个key时,RsaKeyFile[1].gRsaKey显然超出了内存范围。
__DLL_EXPORT__ int tsRSAPrivateEncrypt(unsigned char *input, unsigned char *output,char* path)
&&&&&&&& for(i=0; i&keyofN i++)
&&&&&&&& {
&&&&&&&&&&&&&&&&&& if(strcmp(path,RsaKeyFile[i].path) == 0)
&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&& &&&&&&&& keysize = RSA_size(RsaKeyFile[i].gRsaKey);
&&&&&&&& &&&&&&&&&&&&&&&&&& rsa_in = OPENSSL_malloc(keysize * 2);
&&&&&&&& &&&&&&&&&&&&&&&&&& rsa_out = OPENSSL_malloc(keysize);
&&&&&&&&&&&&&&&&&& &&&&&&&& rsa_outlen& = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, RsaKeyFile[i].gRsaKey, RSA_PKCS1_PADDING);
&&&&&&&& }
由于时间紧迫,暂时无暇改正了。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:11229次
排名:千里之外
原创:14篇
(1)(3)(1)(2)(3)(1)(4)(1)(4)rsa 用C++实现rsa算法,直接用.exe文件运行就可以了 CA program CA认证 182万源代码下载-
&文件名称: rsa
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 43 KB
&&上传时间:
&&下载次数: 18
&&提 供 者:
&详细说明:用C++实现rsa算法,直接用.exe文件运行就可以了-With C++ Achieve rsa algorithm, the direct use of. Exe files can run on a
文件列表(日期:~)(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&rsa&&...\outfile.txt&&...\&&...\RSA.exe
&相关搜索:
&输入关键字,在本站182万海量源码库中尽情搜索:
&[] - 加减密,可以设置128位密码.
也可以是文件加减密。
&[] - 最新的pkcs11 密码令牌接口标准 费了很大的劲才找到的
&[] - RSA加密算法的java实现源代码,很好很实用,推荐广大密码学的筒子分享
&[] - 里面有二十一种加密的算法,很好用的哦,大家一定要多多下载啊
&[] - ECC实现的原代码,包括椭圆曲线的生成和对文件的加密解密。
&[] - 分析RSA算法的应用现状,论证文件加密应用RSA算法的可行性和意义。设计一套完整实用的RSA文件加密解决方案,具体编码实现。对RSA算法进行研究,从常规RSA算法出发,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。在.Net平台引用此组件,实现可以对任意文件进行RSA加密操
&[] - 这个RSA算法是在vc环境下实现,用mfc做了界面,从功能到外观都想当不错RSA数字签名 RSA算法的加密解密 可视化MFC界面
RSA的算法,复制到VC++后稍改一下就可以运行了,
&[] - RSA 在C语言上的实现源码,与ECC同为热门加密的算法
&[] - 一种利用公钥算法(又称为非对称算法)RSA制作注册码的方法。采用这种方法,不知道密钥的话时很难写出注册机来。实际上有部分软件已经使用了这类方法。RSA加密算法DEMO您可能的代码
相关聚客文章

我要回帖

更多关于 rsa c语言 的文章

 

随机推荐