void main()
{
int a[5] /* 存储各位上的数字 */
int num, temp, encripy/* num是要输入的数,temp是交换时用来存储临时值,encripy是加密后的数据 */
int i
do
{
printf("Please input the number:")
scanf("%d",&num)
if(!(num/10000 !=0 &&num/100000==0))
printf("Data error!\n")
}while(!(num/10000 !=0 &&num/100000==0))
a[0] = num/10000%10/* 求各位上的数字 */
a[1] = num/1000%10
a[2] = num/100%10 /* 百位上的数字 */
a[3] = num/10%10/* 十位上的数字 */
a[4] = num%10 /* 个位上的数字 */
for(i = 0i <5++i) /* 开始加密 */
a[i] = (a[i] + 8)%10
temp = a[0] /* 交换位置开始 */
a[0] = a[3]
a[3] = temp
temp = a[1]
a[1] = a[2]
a[2] = temp /* 交换位置结束同时加密结束 */
encripy = a[0]*10000 + a[1]*1000 + a[2]*100 + a[3]*10 + a[4] /* 加密后的数据 */
printf("\nThe scourse number: %d\n", num)/* 输出原数据 */
printf("\nEncripy the number: %d\n\n", encripy) /* 输出加密后的数据 */
}
在VC6.0成功运行,希望对你有帮助!
看你催就仓促写了个,自我感觉写的不是很好,但是能用了。数据只能是大写字母组成的字符串。加密的时候,输入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 = 0i <li ++)
{ 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 = 0i <leni ++)
{ if (i) putchar('-')
printf(" %ld ", encode(nume[i]))
}
putchar('\n')
}
else
{ scanf("%d", &len)
for (i = 0i <leni ++)
{ 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