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

📄 simpledes.java

📁 JAVA实现SimpleDes算法,算法简单
💻 JAVA
字号:
import java.io.IOException;

public class SimpleDes
{ 
public static int[] toBit(byte a)//生成一个字符的二进制
{
int e;
int[] k=new int[8];
for(int i=0;i<8;i++)
{
e=a>>i;
k[i]=e&1;
}
return k;
}
public static void  BitPrint(int[] B)//输出二进制系列
{for(int i=B.length-1;i>=0;i--)
System.out.print(B[i]);
}

public static int[] p8(int[] k)//p8置换函数
{
int[] p2={6,3,7,4,8,5,10,9};
int[] key=new int[8];
for(int i=0;i<8;i++)
key[i]=k[p2[i]-1];
return key;
}
public static void  ls1(int[] m,int i,int j)//循环左移一位函数
{
int temp;
temp=m[j-1];
for(int k=j-1;k>i-1;k--)
m[k]=m[k-1];
m[i-1]=temp;
}

public static int[]  p10(int[] key)//p10函数
{
int[] p1={3,5,2,7,4,10,1,9,8,6};
int[] temp=new int[10];
for(int i=0;i<10;i++)
temp[i]=key[p1[i]-1];
return temp;
}
public static int[] ip(int[] mw)//ip函数
{
	int[] ips={2,6,3,1,4,8,5,7};
	int[] bmw=new int[8];
	for(int i=0;i<8;i++)
	{
		bmw[i]=mw[ips[i]-1];
	}
	return bmw;
	
}

public static int[] ip_1(int[] mw)//ip逆函数
{
	int[] ips={4,1,3,5,7,2,8,6};
	int[] bmw=new int[8];
	for(int i=0;i<8;i++)
	{
		bmw[i]=mw[ips[i]-1];
	}
	return bmw;
	
}
public static int[] fk(int[] mw,int[] key){//fk函数
	int[] bmv=new int[8];
	int[] L=new int[4];
	int[] R=new int[4];
	int[] LF=new int[4];
	bmv=mw;
	for(int i=0;i<4;i++)
		L[i]=mw[i];
	for(int i=4;i<8;i++)
		R[i-4]=mw[i];
	LF=f(R,key);
	for(int i=0;i<4;i++)
		L[i]=L[i]^LF[i];
	for(int i=0;i<4;i++)
		bmv[i]=L[i];
	return bmv;
}
public static int[] f(int[] R,int[] SK)//f函数
{
	int[][] s0={{1,0,3,2},{3,2,1,0},{0,2,1,3},{3,1,3,2}};
	int[][] s1={{0,1,2,3},{2,0,1,3},{3,0,1,0},{2,1,0,3}};
	int[] temp={4,1,2,3,2,3,4,1};
	int[] t={2,4,3,1};
	int[] EP=new int[8];
	int[] ts1=new int[4];
	int[] ts2=new int[4];
	int r,c;
	for(int i=0;i<8;i++)
		EP[i]=R[temp[i]-1];
	for(int i=0;i<8;i++)
		EP[i]=EP[i]^SK[i];
    r=EP[0]*2+EP[3];
    c=EP[1]*2+EP[2];
    ts1[0]=s0[c][r]%2;
    ts1[1]=s0[c][r]/2;
    r=EP[4]*2+EP[7];
    c=EP[5]*2+EP[6];
    ts1[2]=s0[c][r]%2;
    ts1[3]=s0[c][r]/2;
    for(int i=0;i<4;i++)
    	ts2[i]=ts1[t[i]-1];
    	return ts2;
    	
}
public static void sw(int[] mw)//sw函数,交换左右四位
{
	int temp;
	for(int i=0;i<4;i++)
	{temp=mw[i];
	mw[i]=mw[i+4];
	mw[i+4]=temp;	
	}
}
public static void main(String args[])
 { 
byte[] buffer1=new byte[512];
byte[] buffer2=new byte[512];
byte c1,c2,c3;
int count=0;
int[] mw=new int[8];
int[] bmw=new int[8];
int[] sw1=new int[8];
int[] sw2=new int[8];
int[] sw3=new int[10];
int[] key1=new int[8];
int[] key2=new int[8];
System.out.println("请输入明文系列(本程序仅处理前8个)");
try {
	count=System.in.read(buffer1);
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
if(count>8) count=8;
System.out.println("你输入明文的二进制为:");
for(int i=0;i<count;i++)
{

c1=buffer1[i];
mw=toBit(c1);
BitPrint(mw);
System.out.print(" ");
}
System.out.println();
System.out.println("请输入密钥(前2个有效)");

try{
	count=System.in.read(buffer2);
}catch(IOException e)
{
	e.printStackTrace();
}
c2=buffer1[0];
c3=buffer2[1];
sw1=toBit(c2);
sw2=toBit(c3);
for(int i=0;i<10;i++)
{
if(i<5)
sw3[i]=sw1[i];
else
sw3[i]=sw2[i-5];
}
System.out.println();
System.out.println("生产密钥的二进制(10位)为:");
BitPrint(sw3);
System.out.println();
sw3=p10(sw3);
ls1(sw3,1,5);
ls1(sw3,6,10);
key1=p8(sw3);
System.out.println("产生第一个密钥的二进制为:");
BitPrint(key1);
System.out.println();
ls1(sw3,1,5);
ls1(sw3,6,10);
ls1(sw3,1,5);
ls1(sw3,6,10);
key2=p8(sw3);
System.out.println("产生第二个密钥的二进制为:");
BitPrint(key2);
System.out.println();
System.out.println("S-DES算法开始......");
System.out.println("明 文 列 -->密 文 列-->明 文 列");
count=buffer1.length ;
if(buffer1.length >8) count=8;
for(int i=0;i<count;i++)
{
mw=toBit(buffer1[i]);
BitPrint(mw);
System.out.print(" ");
System.out.print("-->");
bmw=ip(mw);
bmw=fk(bmw,key1);
sw(bmw);
bmw=fk(bmw,key2);
bmw=ip_1(bmw);
BitPrint(bmw);
System.out.print(" ");
System.out.print("-->");
mw=ip(bmw);
mw=fk(mw,key2);
sw(mw);
mw=fk(mw,key1);
mw=ip_1(mw);
BitPrint(mw);
System.out.println();
}

} 
} 

⌨️ 快捷键说明

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