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

📄 aes.java

📁 是一个用java写的关于AES加密解密的小软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class AES extends JFrame
	implements ActionListener
{

	/**
	 * @param args
	 */
	private int[][] S_box = 
	{
			{ 99,124,119,123,242,107,111,197, 48,  1,103, 43,254,215,171,118},
			{202,130,201,125,250, 89, 71,240,173,212,162,175,156,164,114,192},
			{183,253,147, 38, 54, 63,247,204, 52,165,229,241,113,216, 49, 21},
			{  4,199, 35,195, 24,150,  5,154,  7, 18,128,226,235, 39,178,117},
			{  9,131, 44, 26, 27,110, 90,160, 82, 59,214,179, 41,227, 47,132},
			{ 83,209,  0,237, 32,252,177, 91,106,203,190, 57, 74, 76, 88,207},
			{208,239,170,251, 67, 77, 51,133, 69,249,  2,127, 80, 60,159,168},
			{ 81,163, 64,143,146,157, 56,245,188,182,218, 33, 16,255,243,210},
			{205, 12, 19,236, 95,151, 68, 23,196,167,126, 61,100, 93, 25,115},
			{ 96,129, 79,220, 34, 42,144,136, 70,238,184, 20,222, 94, 11,219},
			{224, 50, 58, 10, 73,  6, 36, 92,194,211,172, 98,145,149,228,121},
			{231,200, 55,109,141,213, 78,169,108, 86,244,234,101,122,174,  8},
			{186,120, 37, 46, 28,166,180,198,232,221,116, 31, 75,189,139,138},
			{112, 62,181,102, 72,  3,246, 14, 97, 53, 87,185,134,193, 29,158},
			{225,248,152, 17,105,217,142,148,155, 30,135,233,206, 85, 40,223},
			{140,161,137, 13,191,230, 66,104, 65,153, 45, 15,176, 84,187, 22}
	};
	
	private int [][] S_box_1 = 
	{
			{82, 9,  106,213, 48, 54,165, 56,191, 64,163,158,129,243,215,251},
			{124,227,57, 130,155, 47,255,135,52, 142, 67, 68,196,222,233,203},
			{84, 123,148,50, 166,194, 35, 61,238, 76,149, 11, 66,250,195, 78}, 
			{8,  46, 161,102, 40,217, 36,178,118, 91,162, 73,109,139,209, 37},
			{114,248,246,100,134,104,152, 22,212,164, 92,204, 93,101,182,146},
			{108,112, 72, 80,253,237,185,218, 94, 21, 70, 87,167,141,157,132},
			{144,216,171,  0,140,188,211, 10,247,228, 88,  5,184,179,69,   6},
			{208, 44, 30,143,202, 63, 15,  2,193,175,189,  3,  1, 19,138,107},
			{ 58,145, 17, 65, 79,103,220,234,151,242,207,206,240,180,230,115},
			{150,172,116, 34,231,173, 53,133,226,249, 55,232, 28,117,223,110},
			{ 71,241, 26,113, 29, 41,197,137,111,183, 98, 14,170, 24,190, 27},
			{252, 86, 62, 75,198,210,121, 32,154,219,192,254,120,205, 90,244},
			{ 31,221,168, 51,136,  7,199, 49,177, 18, 16, 89, 39,128,236, 95},
			{ 96, 81,127,169, 25,181, 74, 13, 45,229,122,159,147,201,156,239},
			{160,224, 59, 77,174, 42,245,176,200,235,187, 60,131, 83,153, 97},
			{ 23, 43,  4,126,186,119,214, 38,225,105, 20, 99, 85, 33, 12,125}
	};
	private int[] key = 
	{
			0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	};
	private int[] Code =
	{
			0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	};

	private int[] extend_key = new int[176];
	private int[] Rcon = 
	{
			0,1,2,4,8,16,32,64,128,27,54
	};

	
	public void KeyExpansion(){
		int [] temp = new int[4];
		
		for(int i = 0; i < 16; i ++){
			extend_key [i] = key[i];			
		}
		for(int i = 4; i < 44; i ++){
			for(int j = 0; j < 4; j ++)
				temp[j] = extend_key[(i - 1) * 4 + j];
			if( i % 4 == 0){
				RotWord(temp);
				for(int j = 0; j < 4; j ++){
					temp[j] = SubWord(temp[j]);
					if( j==0 )
						temp[j] = temp[j]^Rcon[i/4];
				}
			}
			for(int j = 0; j < 4; j++){
				extend_key[(i - 0) * 4 + j] = extend_key[(i - 4) * 4 + j]^temp[j];
				StringBuffer buf = new StringBuffer(20);
			}
		}
	}
	
	/*
	 * Routate shift left the Array
	 */
	public void RotWord (int temp[]){
		int a;
		a = temp[0];
		temp[0] = temp[1];
		temp[1] = temp[2];
		temp[2] = temp[3];
		temp[3] = a;
	}
	
	/*
	 *	replace the num recording to the S box 
	 */
	public int SubWord(int a)
	{
		int x = a / 16;
		int y = a % 16;
		return S_box[x][y];
	}
	/*
	 * replace the num recording to the S box 1
	 */
	public int SubWord_1(int a)
	{
		int x = a / 16;
		int y = a % 16;
		return S_box_1[x][y];
	}
	
	/*
	 * int type transite into Hex
	 */
	   public String encodeHex(int integer) { 
	        StringBuffer buf = new StringBuffer(2); 

	            if (((int) integer & 0xff) < 0x10) { 
	                buf.append("0"); 
	            } 
	            buf.append(Long.toString((int) integer & 0xff, 16)); 
	        return buf.toString(); 
	    }
	   
	   /*
	    *function of encode 
	    */
	   public void Encode()
	   {
		   /*
		    * initiate the code, that is the code ^ the key
		    */
		   /*
		   ////////////////////////////////////////////////////
		   //System.out.print('\n');
		   System.out.print("encode=========================\n");
		   for(int k = 0; k < 16; k ++){
			   System.out.print((encodeHex(Code[k]))+",");
		   }
		   System.out.print('\n');
		   ////////////////////////////////////////////////////
		   */
		   for(int i = 0; i < 16; i ++){
			   Code[i] = extend_key[i]^Code[i];
		   }
		   for(int time = 1; time < 11; time ++)
			   Loop(time);
	   }
	   public void Loop(int time)
	   {

		   for(int i = 0; i < 16; i ++)
		   {
			   Code[i] = SubWord(Code[i]);
		   }

		   ShiftRow();

		   if(time!=10)
			   MixColumn();
		  
		   for(int i = 0; i < 16; i ++)
		   {
			   Code[i] = Code[i]^extend_key[time*16+i];
		   }
		   /*
		   ////////////////////////////////////////////////////
		   //System.out.print('\n');
		   for(int k = 0; k < 16; k ++){
			   System.out.print((encodeHex(Code[k]))+",");
		   }
		   System.out.print('\n');
		   ////////////////////////////////////////////////////
		   */
	   }
	   public void ShiftRow()
	   {
		   int temp;
		   temp = Code[1];
		   Code[1] = Code[5];
		   Code[5] = Code[9];
		   Code[9] = Code[13];
		   Code[13] = temp;

		   temp = Code[2];
		   Code[2] = Code[10];
		   Code[10] = temp;
		   temp = Code[6];
		   Code[6] = Code[14];
		   Code[14] = temp;
	   
		   temp = Code[3];
		   Code[3] = Code[15];
		   Code[15] = Code[11];
		   Code[11] = Code[7];
		   Code[7] = temp;
	   }
	   
	   public void MixColumn()
	   {
		   int[] temp = new int[16];
		   for(int i = 0 ;i < 4 ; i ++)
		   {
			   temp[i*4] = Multi(Code[i*4],2) ^ Multi(Code[i*4+1],3) ^ 
		   			Multi(Code[i*4+2],1) ^ Multi(Code[i*4+3],1);
			   temp[i*4+1] = Multi(Code[i*4],1) ^ Multi(Code[i*4+1],2) ^ 
			   		Multi(Code[i*4+2],3) ^ Multi(Code[i*4+3],1);
			   temp[i*4+2] = Multi(Code[i*4],1) ^ Multi(Code[i*4+1],1) ^ 
	   				Multi(Code[i*4+2],2) ^ Multi(Code[i*4+3],3);
			   temp[i*4+3] = Multi(Code[i*4],3) ^ Multi(Code[i*4+1],1) ^ 
	   				Multi(Code[i*4+2],1) ^ Multi(Code[i*4+3],2);
		   }
		   for(int i = 0; i < 16; i ++)
		   {
			   Code[i] = temp[i];
		   }
	   }
	   public int Multi(int a,int b)
	   {
	           int[]  temp = new int[8];
			   int[]  flag = new int[8];
			   int c = b;
			   for(int i= 0;i < 8;i++)
			   {
			        int c1,c2;
			        c1 = c / 2;
			        c2 = c % 2;
	                if(c2 == 1)flag[i] = 1;
	                else flag[i] = 0;
	                c = c1;
	                if(i==0)temp[i] = a;
	                else{
	                    temp[i] = temp[i-1]*2;
	                    if(temp[i]>255)temp[i] = (temp[i]%256)^27;
	                    
	                }
	           }
	           a = 0;
	           for(int i = 0; i < 8; i++)
	               a = a^(temp[i]*flag[i]);
	           return a;
			   
		   }
		   
	   

	   /*
	    * function of Decode
	    */
	   public void Decode()
	   {
		   int i,j;
		   /*
		   ////////////////////////////////////////////////////
		   //System.out.print('\n');
		   System.out.print("decode============================\n");
		   for(int k = 0; k < 16; k ++){
			   System.out.print((encodeHex(Code[k]))+",");
		   }
		   System.out.print('\n');
		   ////////////////////////////////////////////////////	
		   */
		   for(i = 0,j = 160 ; i < 16; i ++,j ++){
			   Code[i] = extend_key[j]^Code[i];
			   //System.out.print(encodeHex(Code[i]));
		   }

		   for(int time = 1; time < 11; time ++)
			   Loop_1(time);
	   }
	   
	   public void Loop_1(int time)
	   {
		   ShiftRow_1();

		   
		   for(int i = 0; i < 16; i ++)
		   {
			   Code[i] = SubWord_1(Code[i]);
		   }
		   
		   for(int i = 0; i < 16; i ++)
		   {
			   Code[i] = Code[i]^extend_key[160-time*16+i];
		   }

		   if(time!=10)
			   MixColumn_1();
		   
		   /*
		   ////////////////////////////////////////////////////
		   //System.out.print('\n');
		   for(int k = 0; k < 16; k ++){
			   System.out.print((encodeHex(Code[k]))+",");
		   }
		   System.out.print('\n');
		   ////////////////////////////////////////////////////	
		   */ 
	   }
	   public void ShiftRow_1()
	   {
		   int temp;
		   temp = Code[13];
		   Code[13] = Code[9];
		   Code[9] = Code[5];
		   Code[5] = Code[1];
		   Code[1] = temp;

		   temp = Code[2];
		   Code[2] = Code[10];
		   Code[10] = temp;
		   temp = Code[6];
		   Code[6] = Code[14];
		   Code[14] = temp;
	   
		   temp = Code[3];
		   Code[3] = Code[7];
		   Code[7] = Code[11];
		   Code[11] = Code[15];
		   Code[15] = temp;
	   }
	   
	   public void MixColumn_1()
	   {
		   int[] temp = new int[16];
		   for(int i = 0 ;i < 4 ; i ++)
		   {
			   temp[i*4] = Multi(Code[i*4],14) ^ Multi(Code[i*4+1],11) ^ 
		   			Multi(Code[i*4+2],13) ^ Multi(Code[i*4+3],9);
			   temp[i*4+1] = Multi(Code[i*4],9) ^ Multi(Code[i*4+1],14) ^ 
			   		Multi(Code[i*4+2],11) ^ Multi(Code[i*4+3],13);
			   temp[i*4+2] = Multi(Code[i*4],13) ^ Multi(Code[i*4+1],9) ^ 
	   				Multi(Code[i*4+2],14) ^ Multi(Code[i*4+3],11);
			   temp[i*4+3] = Multi(Code[i*4],11) ^ Multi(Code[i*4+1],13) ^ 
	   				Multi(Code[i*4+2],9) ^ Multi(Code[i*4+3],14);
		   
		   }
		   for(int i = 0; i < 16; i ++)
		   {
			   Code[i] = temp[i];
		   }
	   }
	   private JTextArea original, keytext, to_code, to_original;
	   private JButton encode,decode;
	   //private JLabel label;
	   
	   public void getCode(int code_num[])
	   {
		   for(int i = 0; i < 16; i ++)
		   {
			   Code[i] = code_num[i];
		   }

⌨️ 快捷键说明

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