您的位置:首页 > 其它

S-DES子密钥产生

2016-05-03 19:26 309 查看
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
void P10_(int K[],int P10[],int K0[])
{
for(int i=1;i<=10;i++)
K0[i]=K[P10[i]];
}
void P8_(int K[],int P8[],int K0[])
{
for(int i=1;i<=8;i++)
K0[i]=K[P8[i]];
}
void LS_1(int K0[],int l,int r)
{
int temp=K0[l];
for(int i=l;i<r;i++)
K0[i]=K0[i+1];
K0[r]=temp;
}
void LS_2(int K0[],int l,int r)
{
int t1=K0[l],t2=K0[l+1];
for(int i=l;i<r-1;i++)
K0[i]=K0[i+2];
K0[r-1]=t1;
K0[r]=t2;
}
int main()
{
int K[11],P10[11],P8[11],K1[11],K2[11],K0[11];
while(1)
{
cout<<"输入P10"<<endl;
for(int i=1;i<=10;i++)
cin>>P10[i];
cout<<"输入P8"<<endl;
for(int i=1;i<=8;i++)
cin>>P8[i];
cout<<"输入主密钥"<<endl;
char str[11];
cin>>str;
for(int i=0;i<strlen(str);i++)
K[i+1]=str[i]-'0';
P10_(K,P10,K0);
LS_1(K0,1,5);
LS_1(K0,6,10);
P8_(K0,P8,K1);
LS_2(K0,1,5);
LS_2(K0,6,10);
P8_(K0,P8,K2);
cout<<"K1"<<endl;
for(int i=1;i<=8;i++)
cout<<K1[i];
cout<<endl;

cout<<"K2"<<endl;
for(int i=1;i<=8;i++)
cout<<K2[i];
cout<<endl;
cout<<endl<<endl<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: