| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3184 人关注过本帖
标题:做了一个垃圾的RSA加密程序
只看楼主 加入收藏
三¥叶¥虫
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-3-1
收藏
 问题点数:0 回复次数:12 
做了一个垃圾的RSA加密程序

我是个VC 的菜鸟 仅限于对 字符的加密


大家给我说说什么地方不好 ,谢谢!!!

XSQpuZc8.rar (7.56 KB) 做了一个垃圾的RSA加密程序


[此贴子已经被作者于2006-3-16 12:26:34编辑过]

搜索更多相关主题的帖子: RSA 垃圾 
2006-03-02 22:22
三¥叶¥虫
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-3-1
收藏
得分:0 

int prime_num(int cout) //产生大素数函数
{
int i=0,n=0,a=0;
int s[1000]; //s[i]为 1 时该数不为素数。
for(i=1;i<=cout;i++)s[i]=0; //赋初值。
for(n=4;n<=cout;n+=2) //对除2外的偶数位数组赋1
{
s[n]=1;
}
for(i=3;i<=cout/2;i+=2) //对奇数的倍数判断是否为素数。
{
if(s[i])continue; //s[i]为 1 时继续循环。
for(n=i+i;n<=cout;n+=i) //对通过了if语句的奇数执行;将它们的倍数的项赋值为 1。
{
s[n]=1;
}
}
for(i=2,n=0;i<=cout;i++)
{
if(s[i]==0) //s[i]为0的对应的 i 是素数。
{
a=i; //将素数i赋值给啊
n++;
}
} //最后将 cout 内最大的素数赋给a。
return a;
}

void CRSADlg::OnButton1N()
{
// TODO: Add your control notification handler code here
int mm_p,mm_q;
srand((unsigned)time(NULL)); //产生随机数的函数的前提。
mm_p=rand()%200+1; //产生随机数的格式 rand()%n。
mm_q=rand()%200+1;
//m_p对应 p,m_q对应 q.
m_p=prime_num(mm_p); //调用素数产生函数。
m_q=prime_num(mm_q);
m_n=m_p*m_q; //m_n对应 n,得到n=p*q;
m_o=(m_p-1)*(m_q-1); //m_o对应 偶拉函数。
UpdateData(false);
}

void CRSADlg::OnButton1E()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int m,n,temp;
int i,A[3],B[3],C[3],Q;
//m=m_e;
//m_Pk=m;
if(m_e>m_o)
{
MessageBox("你输入的e大于了欧拉值");
}
else
{
m=m_o;
n=m_e;
while(n!=0&&n!=1)//测验e是否与偶拉函数互素。
{ //用辗转相除法得到。
temp=m%n;
m=n;
n=temp;
}
if(n==0)
{
MessageBox("你输入的e不与欧拉值互素");
}
if(n==1)////根据计算一个数的逆元的步骤。
{
MessageBox("你输入的e通过验证");
A[0]=1;
A[1]=0;
A[2]=m_o;
B[0]=0;
B[1]=1;
B[2]=m_e;
while(B[2]!=0&&B[2]!=1)//求逆元
{
Q=A[2]/B[2];
for(i=0;i<3;i++)
C[i]=A[i]-Q*B[i];
for(i=0;i<3;i++)
A[i]=B[i];
for(i=0;i<3;i++)
B[i]=C[i];
}
if(B[2]==0)
MessageBox("你输入的e与欧拉值没有逆元,请重新输入");
if(B[2]==1)
{
m_d=(B[1]+m_o)%m_o; //得到密钥d,它对应的是m_d。
}
}

}
UpdateData(false);
}

void CRSADlg::OnBUTTON1PkSk()
{
// TODO: Add your control notification handler code here
UpdateData(true);
//显示出公钥(e,n)和私钥(d,n)。
m_Pk.Format("(e,n)=(%d,%d) ",m_e,m_n);
m_Sk.Format("(d,n)=(%d,%d) ",m_d,m_n);
UpdateData(false);
}

void CRSADlg::OnEncrypt() //明文加密。
{
// TODO: Add your control notification handler code here
UpdateData(true);
unsigned long int C,M;
int i,j,k,len,n=0;
int p,q;
char ch;
char ch1[1000];//存储密文字符。
k=0;
for(i=0;i<100;i++)
{
cun[i]=0;
//cun[i]为定义的类的public变量,用于存储每个字符加密后的密文自负个数。
}
for(i=0;i<1000;i++)
{
ch1[i]='\0';
}
len=m_m.GetLength(); //得到明文的长度。
for(i=0;i<len;i++)
{
ch=m_m.GetAt(i);
//从文本框Edit中提取第i个字符,它的函数是GetAt(i)。
M=(int)ch;
C=1;
for(j=0;j<m_e;j++)//求每个明文的密文的数值C。
C=(C*M)%m_n; //用每个C模n后再乘C再赋值给C,用定理得到。
p=q=C;
if(q==0)
{
ch1[k]=(char)q;
k++;
cun[n]++;
n++;
}
//由于算出的C的值很大系统无法运算,
//将C分为2位一个的数并且将其转化为字符存入ch1[]中
while(q!=0)
{
p=q%100;
q=q/100;
ch1[k]=(char)p;
k++;
//j--;
cun[n]++;
}
n++;
//ch1[k]=' ';
//k++;
}
m_c=ch1; //将密文赋给m_c显示出来。
UpdateData(false);
}


void CRSADlg::OnJimi() //解密。
{
// TODO: Add your control notification handler code here
UpdateData(true);
int i,j,l,n=0;
int len1;
char ch[100];//存储明文字符。
unsigned long int M1,C1;
for(i=0;i<100;i++)
{
ch[i]='\0';
}
len1=m_c.GetLength();
//m_ppppp=cun[0];
for(i=0;i<len1;)
{
C1=0;
for(j=i;j<i+cun[n];j++)
{
C1+=((int)m_c.GetAt(j))*((int)pow(100,j-i)); //计算每个字符对应的密文的值C1。
}
M1=1;
for(l=0;l<m_d;l++) //求每个密文的明文的数值M1。
M1=(M1*C1)%m_n; //用每个M1模n后再乘M1再赋值给M1,用定理得到。
ch[n]=(char)M1; //将明文字符赋给ch[]。
i+=cun[n]; //每个明文字符对应了cun[i]个密文字符,所以用i+=cun[i]。
n++;
}
m_jm=ch; //将密文赋给m_jm显示出来。
UpdateData(false);
}

void CRSADlg::OnButton1()
{
// TODO: Add your control notification handler code here
CDialog::DestroyWindow();
}


2006-03-02 22:26
三¥叶¥虫
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-3-1
收藏
得分:0 
菜鸟

今天才传上来东西

[此贴子已经被作者于2006-3-16 12:27:59编辑过]


2006-03-02 22:35
jdytz
Rank: 2
等 级:新手上路
威 望:3
帖 子:104
专家分:0
注 册:2005-4-24
收藏
得分:0 

``` 奔放潇洒活着我的自由
2006-03-02 22:37
三¥叶¥虫
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-3-1
收藏
得分:0 
楼上的什么意思??

2006-03-02 22:55
jdytz
Rank: 2
等 级:新手上路
威 望:3
帖 子:104
专家分:0
注 册:2005-4-24
收藏
得分:0 

我觉得思路很清晰啊


``` 奔放潇洒活着我的自由
2006-03-02 23:16
luckya
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-5-31
收藏
得分:0 

我看明白了,觉得挺好。

2006-05-31 18:36
meideji
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-6-1
收藏
得分:0 
不错的
2006-06-01 08:37
sjqsy2000
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-6-12
收藏
得分:0 

为什么中文就不能加密呢?

2006-06-24 22:42
xd1863
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-4-26
收藏
得分:0 

很好啊,思路很清晰!

[此贴子已经被作者于2007-4-26 9:42:23编辑过]

2007-04-26 09:42
快速回复:做了一个垃圾的RSA加密程序
数据加载中...
 
   



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

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