设计算法并实现,将数组A[0……n-1]中的元素循环右移k位,要求只使用 一个元素大小的附加存储空间。

用C语言实现,这是课程设计,望有能人士能尽快帮我解决,拜谢!

#include<stdio.h>
#define M 101

void change(int a[],int size,int k)
{
int i,j;
int t;
for(i=0;i<k;i++)
{
t=a[size-1];
for(j=size-1;j>0;j--)
{
a[j]=a[j-1];
}
a[0]=t;
}
}

void main()
{
int i,j,n;
int a[M],k;
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}

for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");

change(a,n,k);

for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}

main函数:输入以后,进行调用函数前后的对比
change函数各参数按题目要求所示。。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-30
所谓对称算法就是指加密和解密过程均采用同一把密钥。如DES,3DES,AES等算法都属于对称算法。下面会对这几种有代表性的算法一一做介绍。

DES算法
DES(Data Encryption Standard)是一种经典的对称算法。其数据分组长度为64位,使用的密钥为64位,有效密钥长度为56位(有8位用于奇偶校验)。它由IBM公司在70年代开发,经过政府的加密标准筛选后,于1976年11月被美国政府采用,随后被美国国家标准局和美国国家标准协会(American National Standard Institute, ANSI) 承认。

该技术算法公开,在各行业有着广泛的应用。DES算法从公布到现在已有20多年的历史,随着计算机能力的飞速发展,DES的56位密钥长度显得有些短了。现在,已经有可能通过穷举的方法来对其进行攻击。但是除此以外,还没有发现穷举以外的能有效破译DES的方法。

三重DES
DES算法现在已经不能提供足够的安全性,因为其有效密钥只有56位。因此,后来又提出了三重DES(或称3DES),该方法的强度大约和112比特的密钥强度相当。

这种方法用两个密钥对明文进行三次运算。设两个密钥是K1和K2,其算法的步骤:
1. 用密钥K1进行DES加密。

2. 用K2对步骤1的结果进行DES解密。

3. 用步骤2的结果使用密钥K1进行DES加密。

13. AES算法
1997年1月美国国家标准和技术研究所(NIST)宣布征集新的加密算法。2000年10月2日,由比利时设计者Joan Daemen和Vincent Rijmen设计的Rijndael算法以其优秀的性能和抗攻击能力,最终赢得了胜利,成为新一代的加密标准AES(Advanced Encryption Standard)。

Rijndael加密:

Rijndael是一个密钥迭代分组密码,包含了轮变换对状态的重复作用。轮数Nr 的值取决于分组和密钥的长度。对于AES,当密钥长度为128比特时,Nr =10;当密钥长度为192比特时,Nr =12;当密钥长度为256比特时,Nr =14。

Rijndael算法的加密过程如图1所示。它包括一个初始密钥加法,记作AddRoundKey,接着进行Nr-1次轮变换(Round),最后再使用一个轮变换(FinalRound)。

轮变换由4个步骤组成:SubBytes,ShiftRows,MixColumns和AddRoundKey。最后一轮与前Nr -1次轮变换稍有不同,省掉了其中的MixColumns步骤。

步骤SubBytes是Rijndael算法中唯一的非线性变换。

步骤ShiftRows是一个字节换位,它将状态中的行按照不同的偏移量进行循环移位。使第i 行第j 位的字节移动到位置(j -Ci)mod Nb,移动偏移量Ci 的值依赖于Nb 的取值。其中Nb =分组长度/32,对于AES,Nb 取固定长度4。

步骤MixColumns是作用在状态各列的置换算法。

密钥加法AddRoundKey将状态与一个轮密钥进行异或。轮密钥是由密码密钥通过密钥编排方案[1]导出。轮密钥的长度等于分组的长度。

Rijndael解密:

Rijndael解密算法有2种形式。一种是直接解密算法,即直接利用步骤InsubBytes,InvShiftRows,InvMixColumns和AddRoundKey的逆并倒置其次序对数据进行解密。

另一种是等价解密算法。等价解密算法有利于有效实现良好的运算次序。
相似回答