主页 > 科技生活 >实况之家_做一个RSA的算法,C语言实现的~!编程高手进啊~!救命啊~! >

实况之家_做一个RSA的算法,C语言实现的~!编程高手进啊~!救命啊~!

做一个RSA的算法,C语言实现的~!编程高手进啊~!救命啊~!
看你催就仓促写了个,自我感觉写的不是很好是能用了。数据只能写字母组成的字符串。
加密的时候入Y,然后输入要加密的文本(大写字母)
解密的时候,输入N,然后输入一个整数n表示密文的个数,然后n个整数表示加密时候得到的密文。
/*RSA algorithm */
#include
#include
#include
#define MM 7081
#define KK 1789
#define PHIM 6912
#define PP 85
typedef char strtype[10000];
int len;
long nume[10000];
int change[126];
char antichange[37];

void initialize()
{ int i;
char c;
for (i = 11, c = 'A'; c <= 'Z'; c ++, i ++)
{ change[c] = i;
antichange[i] = c;
}
}
void changetonum(strtype str)
{ int l = strlen(str), i;
len = 0;
memset(nume, 0, sizeof(nume));
for (i = 0; i < l; i ++)
{ nume[len] = nume[len] * 100 + change[str[i]];
if (i % 2 == 1) len ++;
}
if (i % 2 != 0) len ++;
}
long binamod(long numb, long k)
{ if (k == 0) return 1;
long curr = binamod (numb, k / 2);
if (k % 2 == 0)
return curr * curr % MM;
else return (curr * curr) % MM * numb % MM;
}
long encode(long numb)
{ return binamod(numb, KK);
}
long decode(long numb)
{ return binamod(numb, PP);
}
main()
{ strtype str;
int i, a1, a2;
long curr;
initialize();
puts("Input 'Y' if encoding, otherwise input 'N':");
gets(str);
if (str[0] == 'Y')
{ gets(str);
changetonum(str);
printf("encoded: ");
for (i = 0; i < len; i ++)
{ if (i) putchar('-');
printf(" %ld ", encode(nume[i]));
}
putchar('\n');
}
else
{ scanf("%d", &len);
for (i = 0; i < len; i ++)
{ scanf("%ld", &curr);
curr = decode(curr);
a1 = curr / 100;
a2 = curr % 100;
printf("decoded: ");
if (a1 != 0) putchar(antichange[a1]);
if (a2 != 0) putchar(antichange[a2]);
}
putchar('\n');
}
putchar('\n');
system("PAUSE");
return 0;
}
测试:
输入:
Y
FERMAT
输出:
encoded: 5192 - 2604 - 4222
输入
N
3 5192 2604 4222
输出
decoded: FERMAT修改如下:
(主要是循环写的不对,输入的字符应该-'0'与正常的数字对应)
#include
#include
int
candp(int
a,int
b,int
c)
{int
r=1;
int
s;
int
i=1;
for(i=1;i<=b;i++)r=r*a;
printf("%d\n",r);
s=r%c;
printf("%d\n",s);
return
s;}
void
main()
{
int
p,q,e,d,m,n,t,c,r
;
char
s;
printf("please
input
the
p,q:");
scanf("%d%d",&p,&q);
n=p*q;
t=(p-1)*(q-1);
printf("the
n
is
%12d\n",n);
printf("please
input
the
e:");
scanf("%d",&e);
while(e<1||e>n)
//修改为while循环
{
printf("e
is
error,please
input
again:");
scanf("%d",&e);
}
d=1;
while(((e*d)%t)!=1)
d++;
printf("then
caculate
out
that
the
d
is
%d\n",d);
printf("the
cipher
please
input
1\n");
printf("the
plain
please
input
2\n");
scanf("%c",&s);
while((s-'0')!=1&&(s-'0')!=2)
//消除后面的getchar()
此处增加while循环注意括号内的字符
{scanf("%c",&s);}
switch(s-'0')
{
case
1:printf("intput
the
m:");
scanf("%d",&m);
c=candp(m,e,n);
printf("the
plain
is
%d\n",c);break;
case
2:printf("input
the
c:");
scanf("%d",&c);
m=candp(c,d,n);
printf("the
cipher
is
%8d\n",m);
break;
}
}看你仓促写了个,自我感觉写的很好,但用了。数据只能是大写字母组成的字符
加密的时候,输入Y,然后输入要加密的文本(大写字母)
解密的时候,输入N,然后输入一个整数n表示密文的个数,然后n个整数表示加密时候得到的密文。
/*RSA
algorithm
*/
#include
#include
#include
#define
MM
7081
#define
KK
1789
#define
PHIM
6912
#define
PP
85
typedef
char
strtype[10000];
int
len;
long
nume[10000];
int
change[126];
char
antichange[37];
void
initialize()
{
int
i;
char
c;
for
(i
=
11,
c
=
'A';
c
<=
'Z';
c
++,
i
++)
{
change[c]
=
i;
antichange[i]
=
c;
}
}
void
changetonum(strtype
str)
{
int
l
=
strlen(str),
i;
len
=
0;
memset(nume,
0,
sizeof(nume));
for
(i
=
0;
i
<
l;
i
++)
{
nume[len]
=
nume[len]
*
100
+
change[str[i]];
if
(i
%
2
==
1)
len
++;
}
if
(i
%
2
!=
0)
len
++;
}
long
binamod(long
numb,
long
k)
{
if
(k
==
0)
return
1;
long
curr
=
binamod
(numb,
k
/
2);
if
(k
%
2
==
0)
return
curr
*
curr
%
MM;
else
return
(curr
*
curr)
%
MM
*
numb
%
MM;
}
long
encode(long
numb)
{
return
binamod(numb,
KK);
}
long
decode(long
numb)
{
return
binamod(numb,
PP);
}
main()
{
strtype
str;
int
i,
a1,
a2;
long
curr;
initialize();
puts("Input
'Y'
if
encoding,
otherwise
input
'N':");
gets(str);
if
(str[0]
==
'Y')
{
gets(str);
changetonum(str);
printf("encoded:
");
for
(i
=
0;
i
<
len;
i
++)
{
if
(i)
putchar('-');
printf("
%ld
",
encode(nume[i]));
}
putchar('\n');
}
else
{
scanf("%d",
&len);
for
(i
=
0;
i
<
len;
i
++)
{
scanf("%ld",
&curr);
curr
=
decode(curr);
a1
=
curr
/
100;
a2
=
curr
%
100;
printf("decoded:
");
if
(a1
!=
0)
putchar(antichange[a1]);
if
(a2
!=
0)
putchar(antichange[a2]);
}
putchar('\n');
}
putchar('\n');
system("PAUSE");
return
0;
}
测试:
输入:
Y
FERMAT
输出:
encoded:
5192
-
2604
-
4222
输入
N
3
5192
2604
4222
输出
decoded:
FERMAT
编程中的优化算法问题2
假如你想要编x,设x的范围二进制编码长度为10,那二进方式是:x*(max-min)/1023,这个不用开始编开始你可以用rand(n,10)产生n个样本的随机数,然后优化即可。
不是能把“数学模型中的目标函数和每一条约束函数分别编程Matlab里的M文件”,是你用遗传算法就必须要编进去,电脑怎么知道往哪个方向优化是好的,要不把你邮箱留下,我给你发个寻求最大值的遗传算法。

数据结构的算法在VB编程语言中怎么样实现
每门编程其实本质上是相似的,只是语有些差别。数据结不归为哪一种语言,数据结构是门语言的根基,只要你把数据结构学好了,那么你学任何其他的编程语言只要把他的语法搞清楚就可以了。
就哪一楼的排序问题来说把,把几个数进行排序,那么你只要搞懂了数据结构中的排序算法,那么不管你用哪一种编程语言实现的方法都是一样的,只要把相应的语法该一下就可以了。
(本人语文不是很好,可能有表达的不清楚的地方,请自己慢慢体会)那个只是语法上有区别, 与数据结构无关, 算法只是逻辑,与语言无关

都有整型,字符型,双精度,顺序,选择,循环,结构体......
只要你能理解算法,用什么语言C还是VB都可以.
我用C#编程,想实现一个本地搜索的功能,不知道算法和代码应该怎样呢?
using System.IO;
void getResult()
{
string path = TextBox1.Text;
string hasValue = TextBox2.Text;
string value = "";
path = path.TrimEnd('\\') + "\\";//注释:让件夹目录最在/
if(Directory.Exists(path))
{
DirectoryInfo DI = new DirectoryInfo(path);
value = result(DI, hasValue, value,path);
}
MessageBox.Show("结果为(用|分割):" + value);
}
string result(DirectoryInfo DI, string hasValue, string value, string path)
{
foreach (DirectoryInfo di in DI.GetDirectories())
{
value += result(di, hasValue, value, path);
}
foreach (FileInfo fi in DI.GetFiles())
{
if (fi.Name.Contains(hasValue))
{
value += fi.FullName.Replace(path, "") + "|";//注释:这里用FullName.Replace的目的,是让子目录文件带着文件夹名
}
}
return value;
}
能看懂吧?0分...1.首先判断是否存在,存在继续2,不存在
2.遍历路径中最后一个文件夹中的文件,获取所有文件的文件名与textbox2中的值进行匹配,相同或包含则显示出来....

用到的命名空间:using.system.io;
用到的类:directory,file,path...


上一篇: 下一篇: