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
加密的时候,输入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个小题,非常急!!!求助各位编程高手,对于你们来说应该很简单吧?
需要 详细的流程图 和源代码~!
谢谢!!
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语言如何写DLL动态链接库?VB.net 又如何调用其生成的DLL库?急急急!!!!在线等!!