S-DES子密钥产生

#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;
}

你可能感兴趣的:(S-DES子密钥产生)