RSA加密算法怎样用C语言实现? 急急急!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RSA加密算法怎样用C语言实现? 急急急!!!相关的知识,希望对你有一定的参考价值。

输入数据
P=43, q=59 e=13 n=2537 d=937 =>(e=13,n=2537)为公钥,(d=937)为私钥
取明文public encryptions, 将明文按两个一组进行分块,再将明文数字化
pu=1520 bl=0111 ic=0802 ke=1004 ye=2404
nc=1302 ry=1724 pt=1519 io=0814 ns=1318
输出数据
pu=0095 bl=1648 ic=1410 ke=1299 ye=1365
nc=1379 ry=2333 pt=2132 io=1751 ns=1324

参考技术A /*数据只能是大写字母组成的字符串。
加密的时候,输入Y,然后输入要加密的文本(大写字母)
解密的时候,输入N,然后输入一个整数n表示密文的个数,然后n个整数表示加密时候得到的密文。
*/
/*RSA algorithm */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#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
*/追问

这个是我们的实验报告,他让输的数据就是前面说的那个,麻烦你重新弄一下,谢谢

追答

冒汗,俺是抄来的,俺也不会...

C 语言程序设计~实训~急急急!!!

实训一:C的运行环境
 实训内容
从命令行参数输入姓名和性别,在屏幕上显示hello 姓名先生(或女士),例如:
命令行输入test 李四 女,结果显示:hello 李四女士
实训二:分支结构
 实训内容
给学生写评语,若学生成绩在60-69则打印“及格”,70-89“良好”,90-100“优秀”,60以及“不及格”,请分别用 if-else语句和switch语句编程。
实训三:循环结构
 实训内容
1 、编程统计全班学生成绩。要求每次用键盘输入一个学生的2门分数,计算输出每个学生的总分和平均分。如果平均大于等于85为优秀;60-85为通过。统计出成绩优秀的学生及及格学生的人数。
2、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如同一因子是1,2,3,而6=1+2+3因此6是一个完数。编程找出1000之内的所有完数。
实训四:数组
 实训内容
1、有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格、以及其它字符的个数。
2、有一行电文,已按下面规律译成密码。
A->Z a->z
B->Y b->y
C->X c->x ………
即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程序将密码译回原文,并打印出密码和原文。
实训五:C函数
 实训内容
1、编一函数判别某一数是否为素数,若是,返回值为1,否则,返回值为0。在main函数中调用该函数。
2、用递归法将一个整数n转换成字符串,例如输入483,应输出字符串“384”。N的位数不确定,可以是任意位数的整数。

这五道大题,总共分8个小题,非常急!!!求助各位编程高手,对于你们来说应该很简单吧?

需要 详细的流程图 和源代码~!

谢谢!!

天啊,你什么学校毕业的,这么简单,我才大一,c只学了一半我都基本会做。这样吧,我选择性的给你做几个,要给我分哈

2,完数

#include <stdio.h>
void main()

int i,j,sum=0;
for (i=2;i<=1000;i++)

for (j=1;j<=i/2;j++)
if (i%j==0) sum=sum+j;
if (sum==i) printf("%d\n",sum);
sum=0;




实在没心情写了,用switch的很不想写。就是c的教材上都有的例题。

一下是统计字符那个题

#include <stdio.h>
void main()

char a[1000],b[1000];
int i,j,c[1000],num=0;
scanf ("%s",&a);
for (i=0;i<1000;i++)

c[i]=0;

for (i=0;a[i]!='\0';i++)

for (j=0;j<=num;j++)

if (a[i]==b[j])

c[j]++;
break;

if (j==num&&a[i]!=b[num])

b[num]=a[i];
c[num]++;
num++;
break;



for (i=0;i<=num-1;i++)

printf("%c",b[i]);
printf("%d个\t",c[i]);

printf("\n");


一下为求素数

#include <stdio.h>
void main()

int a,i;
scanf ("%d",&a);
for (i=2;i<=a/2;i++)

if (a%i==0)

printf("不是素数\n");
break;



if (i==a/2) printf("是素数\n");

参考技术A 实训是针对你的.既然是求助,只需点拨一下即可.这些题太基础了,只要看看书应该会的.按你的要求"详细的流程图和源代码"要在电脑上打出来是很琐碎的.很多人会不屑一顾,因为那30分不值得付出那么多精力. 参考技术B 虽然简单,但也费时。30分做8题无语... 参考技术C 有300分 我立即做... 参考技术D 不会呀

以上是关于RSA加密算法怎样用C语言实现? 急急急!!!的主要内容,如果未能解决你的问题,请参考以下文章

急急急C语言中怎么用*等符号输出一种图形 如心形

求一个用c语言写的DES加密算法~~

用C语言如何写DLL动态链接库?VB.net 又如何调用其生成的DLL库?急急急!!!!在线等!!

c 语言求源代码急急急

急急急 求大神帮忙 用vc++ 生成1024位大素数 用到米勒拉宾素性测试

RSA加密解密算法示例(C语言)