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

📄 test.java

📁 DES算法全称为Data Encryption Standard,即数据加密算法,DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位。RSA的安全性依赖于大数分解。公钥和私
💻 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 + -