要求:对如下内容进行详细描述。
仿射密钥生成算法;
通过函数make_key函数生成密钥
a = make_key(time(NULL));
b = make_key(a);
int make_key(long int a)
{ int i;
srand(a);
i = rand() % 10000;
return i;}
仿射加解密算法;
X为明文,y为密文
加密:ax+b = y (mod 26);
解密:x = a-1(y - b) mod 26;
重合指数计算算法;
统计各字母在明文中出现的频数p(i),再拿该频数除以明文中所有字符长度得到频率,
重和指数I(x)= ;
行置换密钥生成算法;
srand(time(NULL)); //循环随机产生m个密钥
for (i=0;i<m;i++)
{sum=rand()%m+1;
while (judge(pre,i,sum)) // 当当前产生的数与以前的数重复时
sum=rand()%m+1;
pre[i]=sum;}
int judge(int pre[],int i,int sum) //用来判断当前产生的数是否与前面的数相等
{
int j=0;
for (j=0;j<i;j++)
{
if (sum==pre[j])
return 1;
}
return 0;
}
置换为i 与prep[i]对应;
行置换加解密算法及其数据结构设计;
加密:
将要加密的明文分割,每m个为一组,然后用产生密钥进行加密,例如i与pre[i]
对应,则将该组中的第i个字母与第pre[i]个元素互换,直到全部字符都互换后再进行下一组的互换,最后多余的不够一组的字符直接打印到密文里;
解密:
将密文解密,该算法与加密算法相反,可仿照加密算法进行解密,只要先把密文按密钥的对应顺序保存到一数组中,再按顺序打印到解密文本中即可。
数据结构: pre=(int *)malloc(m*sizeof(int));申请行置换加密的密钥。
模拟Rotor机的算法及其数据结构设计。