标题:[求助]我编的RSA加密解密出现的问题
只看楼主
happyyu
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2005-4-10
 问题点数:0 回复次数:6 
[求助]我编的RSA加密解密出现的问题

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
unsigned long high_exp(unsigned long x,unsigned long y,unsigned long n)/*高次幂求摩*/
{
unsigned long e,f;
f=x%n;
while(y!=1)
{
e=x*f;
f=e%n;
y--;

}
return(f);
}

unsigned long pr_num()/*随机产生素数*/
{
unsigned long a,b,c;
srand((unsigned)time(NULL));
do
{
c=0;
a=rand()%50;
if(a==0)
continue;
for(unsigned long i=2; i<=(unsigned long)sqrt((double)a); i++)
{
b=a%i;
if(b==0) c+=1;
}

}while(c!=0||a==0);
return(a);
}

unsigned long gcd(unsigned long a,unsigned long d)/*欧几里德算法*/
{
int r;
do
{
r=a%d;
a=d;
d=r;
}while(r>0);
if(a=1) return 1;
else return 0;
}
unsigned long widen_gcd(unsigned long x,unsigned long y,unsigned long*a1,unsigned long *a2,unsigned long *b1,unsigned long *b2)
{
unsigned long q,r,a,b; /*扩展欧几里德算法*/
q=x/y;
r=x%y;
a=*a2-q*(*a1);
b=*b2-q*(*b2);
if(r==0)
{
return y;
}
*a2=*a1;
*b2=*b1;
*a1=a;
*b1=b;
return widen_gcd(y,r,a1,a2,b1,b2);
}
unsigned long prod_ek_dk(unsigned long *x,unsigned long *y)/*产生密钥*/
{
unsigned long e,d,p,q,n,t,b1,b2,a2;
e=0;a2=1;b1=1;b2=0;
srand((unsigned)time(NULL));
while(1)
{
p=pr_num();
q=pr_num();
if(p!=q)
break;
}
cout<<"p="<<p<<" "<<"q="<<q<<endl;
n=p*q;
t=(p-1)*(q-1);
while(1)
{
d=rand()%t;
if(gcd(d,t)&&d!=1) break;
}
cout<<"t="<<t<<endl;
widen_gcd(d,t,&e,&a2,&b1,&b2);

if(e<0)
{
e=e+t;

}
*x=e ;
*y=d ;

return(n);
}

unsigned long main()
{
unsigned long c,qq,d,n,e;
n=prod_ek_dk(&d,&e);
cout<<"d="<<d<<" "<<"e="<<e<<" "<<"n="<<n<<endl;
unsigned long ww=5;
c=high_exp(ww,d,n);
cout<<c<<endl;
qq=high_exp(c,e,n);
cout<<qq<<endl;
return 0;
}
有时候加解密可以成功,有时候不成功,
d的产生好象也有点问题,有时候产生的数和程序要求不符.

在C++里面怎么按字符 读取(输出到) TXT文件里面的数据

搜索更多相关主题的帖子: RSA 解密 
2006-12-06 21:38
happyyu
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2005-4-10
得分:0 

怎么没人帮我看看阿


我晕死,因为不会
2006-12-09 23:35
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
得分:0 
在我不清楚你的算法之前, 我是没有办法帮你的。

你的程序并没有语法, 句法的问题。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-12-10 00:31
happyyu
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2005-4-10
得分:0 

R算法:先随机产生两个素数p、q,t=(p-1)*(q-1),n=p*q;在随即产生一个数的d,d和t互素。
在根据扩展欧几里德求出d的逆员e ;即d*e=1(mod t)
公钥(d,n) 私钥(e,n)
从文件里面读出一个字符M
密文C=M^d(mod n);然后输出到文件中

原文M=C^e(mod n);

在C++里面怎么按字符 读取(输出)TXT文件里面的数据


我晕死,因为不会
2006-12-10 18:54
happyyu
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2005-4-10
得分:0 

怎么没人帮我看看啊
急啊!


我晕死,因为不会
2006-12-12 16:41
一二三四五
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:856
专家分:0
注 册:2006-11-13
得分:0 

太复杂了


hey,di va la
2006-12-12 17:01
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
得分:0 
看得眼都花了

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2006-12-12 22:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-107719-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.549881 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved