AES加密算法用C语言实现
源代码在线查看: c#代码转换为vc经验.txt
/*[C#代码转换为VC经验]
king_koo,2005/01/28
[概述]
本文以实现aes算法加解密例程为例,说一下C#代码转换为VC代码经验。
例子代码下载Http://otiana.com/vcangle/source/aesdemo.rar
相应C#的例子请参考Http://www.vckbase.com/document/viewdoc/?id=1068
这个c#的类是没有头文件的。在vc中我们为了使用方便需要为他构造一个头文件,
把相应的变量和函数声明放进来即可。
[2维数组]
C#中你可以arr[a,b]这样表示2维数组,VC可以arr[a][b],但a和b不确定时就比较
麻烦。所以和多地方我们用arr[a*b]表示2维数组,访问时用arr[i*b+j]。如下例:
C#:
byte[,] temp = new byte[a,b];//声明。a、b是常量
for(int i=0;i for(int j=0;j temp[i,j]=0;//使用
VC:
byte temp[a*b];//没事没必要动态分配内存
for(int i=0;i for(int j=0;j temp[i*b+j]=0;//使用
[循环]
注意上例中的++i了吗?我没有写错,C#中的for循环用++i,VC用i++。
[变量的多次声明]
C#中变量的多次声明,如:
for(int i=0;i for(int i=0;i 是合法的。VC中则提示语法错误,要把后边的声明去掉:
for(int i=0;i for(i=0;i
[变量声明]
C#中变量声明很喜欢用new的,如:
byte[] result = new byte[4];
因为C#有垃圾回收机制所以一般不用你去释放内存,
可是在VC中就麻烦了,所以我一般改成:
byte result[4];
[函数返回]
C#中可以这样返回
byte[] SubWord(byte[] word)
{
byte[] result = new byte[4];
......
return result;
}
在vc中却是错误的的,因为result是局部变量,函数返回后指针就丢了。
我们可以在参数中返回,改成这样:
SubWord(byte* word,byte *result)
{
......
}
[>>和+的优先级]
C#中+的优先级要比>>高,在VC中却恰好相反,+的优先级要比>>低。
所以转换时要用括号改变运算优先级。如C#中:
this.State[r,c] = this.Sbox[ (this.State[r,c] >> 4), (this.State[r,c] & 0x0f) ];
VC则为:
State[r][c] = Sbox[ 16*(State[r][c] >> 4)+ ( State[r][c] & 0x0f) ];
[]*/