⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spn加密.cpp

📁 此代码实现S-P密码的加密解密
💻 CPP
字号:
#include <fstream.h>
#include <stdlib.h>
#include<stdio.h>

static char w[17];
static char u[17];
static char v[17];

void xor(char *c1,char *c2)                 //异或运算,相同为零,不同为一
{ 
	for(int i=0;i<16;i++)
	{
		if(c1[i]==c2[i])
           u[i]='0';
		else u[i]='1';
	}
	return ;
}

void alt_s(char * c)
{
	int a[4];
	for(int i=0;i<4;i++)
	{
		a[i]=(c[i*4]-48)*8+(c[i*4+1]-48)*4+(c[i*4+2]-48)*2+c[i*4+3]-48;
        switch (a[i])
		{
        	case 0:  a[i]=14;  break;	
        	case 1:  a[i]=4;   break;
        	case 2:  a[i]=13;  break;	
        	case 3:  a[i]=1;   break;
        	case 4:  a[i]=2;   break;
        	case 5:  a[i]=15;  break;	
        	case 6:  a[i]=11;  break;
        	case 7:  a[i]=8;   break;
        	case 8:  a[i]=3;   break;
        	case 9:  a[i]=10;  break;
        	case 10: a[i]=6;   break;
        	case 11: a[i]=12;  break;
        	case 12: a[i]=5;   break;
        	case 13: a[i]=9;   break;
        	case 14: a[i]=0;   break;
         	case 15: a[i]=7;   break;
		}

	}
	for(i=0;i<4;i++)
	{
		if(a[i]>=8)
		{
			v[i*4]='1';
			a[i]=a[i]-8;
		}
		else
			v[i*4]='0';
		if(a[i]>=4)
		{
			v[i*4+1]='1';
			a[i]=a[i]-4;
		}
		else
			v[i*4+1]='0';
			if(a[i]>=2)
		{
			v[i*4+2]='1';
			a[i]=a[i]-2;
		}
		else
			v[i*4+2]='0';
			if(a[i]==1)
				v[i*4+3]='1';
			else
				v[i*4+3]='0';
	}
}

void alt_w(char * c)
{
	for(int i=0;i<4;i++)
		for(int j=0;j<4;j++)
		{
				w[i*4+j]=c[j*4+i];
		}
}

void main()
{
	char *k[6];
	int i,j,k1=1;
	k[1]="0011101010010100";	k[2]="1010100101001101";	k[3]="1001010011010110";	k[4]="0100110101100011";	k[5]="1101011000111111";                        //定义了子密钥
	ifstream fin("明文流.txt");
	ofstream fout("密文流.txt");
	while(k1++<256*256)
	{
		for(i=0;i<16;i++)
		{
			fin>>w[i];		
		}

	for(j=1;j<=3;j++)
	{
		xor(w,k[j]);                              //明文与子密钥异或,结果放到u中
		alt_s(u);				//用s盒子代换,结果放到v中
		alt_w(v);                               //置换,结果放到w中
	}
	xor(w,k[4]);
	alt_s(u);
	xor(v,k[5]);
	fout<<u;

	}
	fin.close();
	fout.close();
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -