📄 test.java
字号:
package org.encryption.des;
public class Test {
public static void main(String[] args){
// String keystr="0100001100110100011101100111111110101011110111001101001110111001";
// byte[] key=toBinary(keystr);
// System.out.println("key:"+8*key.length+"\n"+ToBinaryString(key));
// String[] subKey = getSubKey(key);
// System.out.println("subKey:");
// for(int i=0;i<subKey.length;i++){
// System.out.println(i+"@"+subKey[i].length()+"------\n"+subKey[i]);
// }
// byte[] key1={1,2,127};
// byte[] key2={-128,-128,-128};
// String key1Str=ToBinaryString(key1);
// String key2Str=ToBinaryString(key2);
// System.out.println(key1Str);
// System.out.println("xor");
// System.out.println(key2Str);
// char[] xorResult=xor(key1Str.toCharArray(),key2Str.toCharArray());
// System.out.println(xorResult);
DESAlgorithm des=new DESAlgorithm();
// String key="0100001100110100011101100111111110101011110111001101001110111001";
String key="你还好吗";
des.setKey(key.getBytes());
// String msg="0110000100000001000000110101010001010110000000010110011110001001";
String msg="我是张鹏啊";
System.out.println("原文:"+msg);
System.out.println("原文二进制:"+ToBinaryString(msg.getBytes()));
System.out.println("加密--------------------------");
byte[] ee= des.encrypt(msg.getBytes());
System.out.println("密文:"+new String(ee));
System.out.println("密文二进制:"+ToBinaryString(ee));
System.out.println("解密--------------------------");
byte[] dd=des.decrypt(ee);
System.out.println("原文:"+new String(dd));
System.out.println("原文二进制:"+ToBinaryString(dd));
}
// private static String[] getSubKey(byte[] key){
// String[] subKey = new String[16];
// String keyStr = ToBinaryString(key);
// char[] keyAfterA=KeyReplaceA(keyStr);
// char[] keyLeft28=new char[28];
// char[] keyRight28=new char[28];
// System.arraycopy(keyAfterA, 0, keyLeft28, 0, 28);
// System.arraycopy(keyAfterA, 28, keyRight28, 0, 28);
// for(int i=0;i<16;i++){
// ratoteLeft(keyLeft28,DesHelper.loopLeftMove[i]);
// ratoteLeft(keyRight28,DesHelper.loopLeftMove[i]);
// char[] keyAfterB= keyReplaceB(String.copyValueOf(keyLeft28)+String.copyValueOf(keyRight28));
// subKey[i]=String.copyValueOf(keyAfterB);
// }
// return subKey;
// }
//
// private static char[] KeyReplaceA(String keyStr) {
// char[] keyArray56=new char[56];
// for(int i=0;i<56;i++){
// keyArray56[i]=keyStr.charAt(DesHelper.KeyReplaceA[i]-1);
// }
// return keyArray56;
// }
//
// private static void ratoteLeft(char[] src,int times){
// char[] copy=new char[src.length];
// System.arraycopy(src, 0, copy, 0, src.length);
// for(int i=0;i<src.length;i++){
// src[i]=copy[(i+times)%src.length];
// }
// }
//
// private static char[] keyReplaceB(String keyStr) {
// char[] keyArray48=new char[48];
// for(int i=0;i<48;i++){
// keyArray48[i]=keyStr.charAt(DesHelper.keyReplaceB[i]-1);
// }
// return keyArray48;
// }
//
//
//
private static String ToBinaryString(byte[] binary) {
StringBuffer strBuf = new StringBuffer();
String intStr;
for (int i = 0; i < binary.length; i++) {
intStr = Integer.toBinaryString(binary[i]);
if (intStr.length() == 8)
strBuf.append(intStr);
else if (intStr.length() > 8) {
strBuf.append(intStr.substring(intStr.length() - 8, intStr
.length()));
} else {
char[] padding = new char[8 - intStr.length()];
for (int j = 0; j < padding.length; j++)
padding[j] = '0';
strBuf.append(padding);
strBuf.append(intStr);
}
}
return strBuf.toString();
}
private static byte[] toBinary(String binaryString) {
int bytes = binaryString.length() / 8;
byte[] arrayByte = new byte[bytes];
String byteStr;
for (int i = 0; i < bytes; i++) {
byteStr = binaryString.substring(i * 8, (i + 1) * 8);
byte s = 0;
for (int j = 0; j < 8; j++) {
if (byteStr.charAt(j) == '1')
s += Math.pow(2, 7 - j);
}
arrayByte[i] = (byte) ((s <= 127) ? s : (s - 256));
}
return arrayByte;
}
// // 如果明文的位数不是64的整数倍要进行扩充,扩充的第一位为1其他位为0
// private byte[] perDo(byte[] plainMsg) {
// int length = plainMsg.length;
// int padding = 0;
// byte[] paddingByte;
// if ((padding = length % 8) != 0)
// padding = 8 - padding;
// paddingByte = new byte[padding];
// paddingByte[0] = -128;
// for (int i = 1; i < padding; i++) {
// paddingByte[i] = 0;
// }
// byte[] doByte = new byte[plainMsg.length + paddingByte.length];
// System.arraycopy(plainMsg, 0, doByte, 0, plainMsg.length);
// System.arraycopy(paddingByte, 0, doByte, plainMsg.length,
// paddingByte.length);
// return doByte;
// }
// private static char[] xor(char[] byteArrayA, char[] byteArrayB) {
// if (byteArrayA.length != byteArrayB.length)
// return null;
// else {
// char[] xorResult = new char[byteArrayA.length];
// for(int i=0;i<byteArrayA.length;i++){
// if(byteArrayA[i]==byteArrayB[i])
// xorResult[i]='0';
// else
// xorResult[i]='1';
// }
// return xorResult;
// }
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -