資源簡介
計算DES的8個S盒差分分布概率表的程序,結果寫入文件中
代碼片段和文件信息
#include?
#include?
#include?
#include?“tables.h“
#include?“bool.h“
//把DataIn開始的Len長度的位復制到DataOut
void?BitsCopy(bool?*DataOutbool?*DataInint?Len)
{
int?i=0;
for(i=0;i {
DataOut[i]=DataIn[i];
}
}
//將字節轉化為位函數,每8次換一個字節
void?ByteToBit(bool?*DataOutchar?*DataInint?Num)
{
int?i=0;
for(i=0;i {
DataOut[i]=(DataIn[i/8]>>(i%8))&0x01;
}
}
//將位轉化為字節函數
void?BitToByte(char?*DataOutbool?*DataInint?Num)
{
int?i=0;
for(i=0;i<(Num/8);i++)
{
DataOut[i]=0;
}
for(i=0;i {
DataOut[i/8]|=DataIn[i]<<(i%8);
}
}
//二進制轉化為16進制
void?BitToHex(char?*DataOutbool?*DataInint?Num)
{
int?i=0;
for(i=0;i {
DataOut[i]=0;
}
for(i=0;i {
DataOut[i]=DataIn[i*4]+(DataIn[i*4+1]<<1)+(DataIn[i*4+2]<<2)+(DataIn[i*4+3]<<3);
if((DataOut[i]%16)>9)
{
DataOut[i]=DataOut[i]%16+‘7‘;
}
else
{
DataOut[i]=DataOut[i]%16+‘0‘;
}
}
}
//十六進制轉化為二進制
void?HexToBit(bool?*DataOutchar?*DataInint?Num)
{
int?i=0;
for(i=0;i {
if((DataIn[i/4])>‘9‘)
{
DataOut[i]=((DataIn[i/4]-‘7‘)>>(i%4))&0x01;
}
else
{
DataOut[i]=((DataIn[i/4]-‘0‘)>>(i%4))&0x01;
}
}
}
//十進制轉化為二進制
void?IntToBit(bool?*DataOutint?nint?Num)
{
int?i;
i=Num;
while(n)
{
DataOut[i-1]=n%2;
n=n/2;
i--;
}
}
//指數函數
int?xn(int?numint?n)
{
int?result=1;
int?i=1;
for(i=1;i<=n;i++)
result*=num;
return?result;
}
//二進制轉成十進制
int?BitToInt(bool?*DataInint?Num)
{
int?i=0;
int?DataOut=0;
for(i=0;i {
DataOut+=((DataIn[i])*xn(2Num-i-1));
}
return?DataOut;
}
//按位異或
void?Xor(bool?*DataAbool?*DataBint?Num)
{
int?i=0;
for(i=0;i {
DataA[i]=DataA[i]^DataB[i];
}
}
//S盒替換,輸入48位,輸入32位,并與子密鑰異或
void?S_Change(bool?DataOut[32]bool?DataIn[48])
{
int?iXY;
for(i=0X=0Y=0;i<8;DataIn+=6DataOut+=4i++)
{
Y=(DataIn[0]<<1)+DataIn[5];
X=(DataIn[1]<<3)+(DataIn[2]<<2)+(DataIn[3]<<1)+DataIn[4];
- 上一篇:基于51單片機的人體心率采集
- 下一篇:虛擬機MacOS10.14
評論
共有 條評論