📄 des.java
字号:
m_MEWEN=m_MEWEN+" ";
}
}
else if(sh=='D'){
m_YUANWEN="";
for(i=0;i<m_MINGWEN.length();i++)
{
ch=t1[i*8+1];
for(j=2;j<=8;j++)
ch=ch*2+t1[i*8+j];
m_YUANWEN=m_YUANWEN+(char)ch;
ch=0;
}
}
}
public static void initial()//throws IOException
{
int m[]=new int[65];
int m1[]=new int[65];
int k1[]=new int[65];
int i,j,k;
int k0[]=new int[57];
int C0[]=new int[57];
int C[][]=new int[17][29];
int D[][]=new int[17][29];
int ip[]={58,50,42,34,26,18,10,2,
60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,
64,56,48,40,32,24,16,8,
57,49,41,33,25,17,9,1,
59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,
63,55,47,39,31,23,15,7};
int PC_1[]={57,49,41,33,25,17,9,
1,58,50,42,34,26,18,
10,2,59,51,43,35,27,
19,11,3,60,52,44,36,
63,55,47,39,31,23,15,
7,62,54,46,38,30,22,
14,6,61,53,45,37,29,
21,13,5,28,20,12,4};
int PC_2[]={14,17,11,24,1,5,
3,28,15,6,21,10,
23,19,12,4,26,8,
16,7,27,20,13,2,
41,52,31,37,47,55,
30,40,51,45,33,48,
44,49,39,56,34,53,
46,42,50,36,29,32};
char ch;
int[] str=new int[8];
for(i=0;i<m_MIYAO.length();i++)
{
ch=m_MIYAO.charAt(i);
int s=(int)ch;
for(j=0;j<8;j++){
str[j]=s%2;
s=s/2;
}
for(j=7;j>=0;j--)
k1[i*8+8-j]=str[j];
}
for(i=0;i<m_MINGWEN.length();i++){
ch=m_MINGWEN.charAt(i);
int s=(int)ch;
for(j=0;j<8;j++){
str[j]=s%2;
s=s/2;
}
for(j=7;j>=0;j--)
m[i*8+8-j]=str[j];
}
for(i=1;i<=64;i++)
m1[i]=m[ip[i-1]];
for(i=1;i<33;i++)
L0[i]=m1[i];//明文左侧的初始化
for(i=33;i<=64;i++)
R0[i-32]=m1[i];//明文右侧的初始化
for(i=1;i<57;i++)//生成子密钥
k0[i]=k1[PC_1[i-1]];
for(i=1;i<29;i++)
C[0][i]=k0[i];
for(i=29;i<=56;i++)
D[0][i-28]=k0[i];
for(k=0;k<16;k++) {
if(k==0||k==1||k==8||k==15){
for(i=1;i<28;i++)//循环左移一位
{
C[k+1][i]=C[k][i+1];
D[k+1][i]=D[k][i+1];
}
C[k+1][28]=C[k][1];
D[k+1][28]=D[k][1];
}
else {
for(i=1;i<27;i++)//循环左移两位
{
C[k+1][i]=C[k][i+2];
D[k+1][i]=D[k][i+2];
}
C[k+1][27]=C[k][1];
D[k+1][27]=D[k][1];
C[k+1][28]=C[k][2];
D[k+1][28]=D[k][2];
}
for(i=1;i<=28;i++)
{
C0[i]=C[k+1][i];
C0[i+28]=D[k+1][i];
}
for(i=1;i<=48;i++)
K[k+1][i]=C0[PC_2[i-1]];//生成子密钥k1
}
}
public static void main(String[]args)throws IOException
{ String s;
String s1="";
int len,i,j;
Des des=new Des();
if(args.length<2)
System.out.println("please input mingwen and miyao");
else{
BufferedReader in
= new BufferedReader(new InputStreamReader(new BufferedInputStream(
new FileInputStream(args[0]))));
while((s=in.readLine())!=null)
{
s1=s1+s;s1=s1+'\r';s1=s1+'\n';}
in.close();
des.m_MIYAO=args[1];
DataOutputStream out1=
new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("yuanwen.txt")));
DataOutputStream out=
new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("mewen.txt")));
len=s1.length()/8;
if(len!=0)
for(i=0;i<len;i++)
{
des.m_MINGWEN=s1.substring(i*8,i*8+8);
des.initial();
des.des('E');
out.writeBytes(m_MEWEN);
des.des('D');
out1.writeBytes(m_YUANWEN);
}
if(s1.length()!=len*8){
des.m_MINGWEN=s1.substring(len*8,s1.length());
des.initial();
des.des('E');
out.writeBytes(m_MEWEN);
des.des('D');
out1.writeBytes(m_YUANWEN);
}
out.close();
out1.close();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -