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

📄 code.java

📁 各种加密的实现,很好很好 各种加密的实现,很好很好
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
					FileOutputStream out = new FileOutputStream(f);  
					out.write(textPane.getText().getBytes());  						 
				}
			 catch (Exception ex)
				{
					ex.printStackTrace();  
				}
		}
			
		}
	}
	class Opening
	{
		public Opening()
		{
			int i = filechooser.showOpenDialog(Code.this); 
			if (i == JFileChooser.APPROVE_OPTION) 
			{  
				File f = filechooser.getSelectedFile();  
				try 
				{
					InputStream is = new FileInputStream(f); 
				     textPane.read(is, "d");  
				}
				 catch (Exception ex) 
				{
					ex.printStackTrace();   
				}
			}
		}
	}
	class ComplierAction extends AbstractAction
	{
		public ComplierAction()
		{
			super("哈夫曼加密");			 
		}	 
		public void printlist(LinkedList list)
		{
			int k=list.size();
			int i;
			for(i=0;i<k;i++)
			{
				Node temp=(Node)list.get(i);
				System.out.print(temp.info);
				System.out.print(temp.code);
				System.out.print("\n");
			}
		}
		public int checkexist(char a,LinkedList list)
		{
			int k=list.size();
			int i;						   
			for(i=0;i<k;i++)
			{
			  	Type temp=(Type)list.get(i);			  	 
			    if(temp.data==a)
			    return i;	
			}		    
			return -1;
		}
		public void check(char a,LinkedList list1,LinkedList list2)
		{
		 	Type te=new Type(a);		  
		 	TTree t=new TTree(a);			
			int i=checkexist(a,list1);				 
		    if(i==-1)
		       {list1.add(te);list2.add(t);}
		    else
		    {
		    	t=(TTree)list2.get(i);
		    	t.addcount();
		    	list2.set(i,t);	    	 
		    }		    		 
		}	   
		public void printstack(Tstack s,LinkedList list)
		{
			Node node=new Node();			
			Tstack temp=new Tstack();
			while(!s.empty())
			   if(s.gettop()!=null)
			      temp.push(s.pop());			 
			while(!temp.empty())
			{
			 	if(temp.gettop().flag!='2')
			 	{			      
			     	node.code=node.code+temp.gettop().flag;			      
			 		node.info=temp.gettop().info;	    	
			 	}			 	 
				if(temp.gettop()!=null)
				s.push(temp.pop());
			}
			list.add(node);				 			 
		}		
		public TTree create(LinkedList list)
		{
			TTree s=new TTree(); 
			LinkedList temp=list;
			TTree min1,min2,mid,t1;
			char m='$';			 
			int i=0,j=0,k=1,len=list.size();		 		 		 
			while(temp.size()!=1)
			{   
				min1=(TTree)temp.get(0);
	  		    min2=(TTree)temp.get(1);
	  		    j=0;k=1;
				for(i=2;i<len;i++)
				{
					mid=(TTree)temp.get(i);
					if(mid.count<min1.count)
						{min1=mid;j=i;}
					else
						if(mid.count<min2.count)
							{min2=mid;k=i;}
				}
			  t1=new TTree(m,min1,min2);
		      min1.parent=t1;
		      min2.parent=t1; 
			  if(j>k)
			  { 
			    temp.remove(j);
			    temp.remove(k);
			  }
			  else
			  { 
			    temp.remove(k);
			  	temp.remove(j);			    
			  }
			  temp.add(t1);	
			  len=temp.size();			 
		}	 
		s=(TTree)temp.get(0);
		TT=s;	
		return s;
    }
  		public void Allpath(TTree T,Tstack s,LinkedList list)		
	 	{
 		   if(T!=null)
 		   {  
 		      s.push(T);
 		   	  if(T.lchild==null&&T.rchild==null)
 		   	     printstack(s,list);
 		   	  else
 		   	  {
 		   	  	Allpath(T.lchild,s,list);
 		   	  	Allpath(T.rchild,s,list);
 		   	  }
 		   	  if(!s.empty())
 		   	  s.pop();		   	       
 		   }
 		}
 		public String convert(char a)
 		{
 		   int k=list3.size(); 		   
 		   int i=0;
 		   Node temp=new Node(); 		    
 		   for(i=0;i<k;i++)
 		   {
 		   	    temp=(Node)list3.get(i);
			    if(temp.info==a)
			        {break; }			    
 		   }
          return temp.code;	
 		}
		public void actionPerformed(ActionEvent e)
		{
		    int i=0;
		    char t[]=textPane.getText().toCharArray();		     
		    LinkedList list1=new LinkedList();
		    LinkedList list2=new LinkedList();
		    list3=new LinkedList();
		    String co=new String();		   
		    TTree T;		  
		    try
		    {
		     for(;i<textPane.getText().length();i++)
		            	 check(t[i],list1,list2);	    	
		   		 	 T=create(list2); 		   	 	     
		     Tstack s=new Tstack();		       
		     Allpath(T,s,list3);		    		      		    		    
		     for(i=0;i<textPane.getText().length();i++)
		     	       co=co+convert(t[i]);
		     textPane.setText(co);
		    new Warning("提示","保存HUFFMAN钥匙");	
		    ///////////save///////////////////////
		     i = filechooser.showSaveDialog(Code.this);  
				if (i == JFileChooser.APPROVE_OPTION) 
				{   
				File f = filechooser.getSelectedFile();  
				try{
				String en=new String();
				en=en+(char)(13);				 
				RandomAccessFile out=new RandomAccessFile(f,"rw");
				if(f.exists())
					{
					long length=f.length();
					out.seek(length);
					}
				int k=list3.size();
				int j=0;
				Node temp=new Node();
			    for(j=0;j<k;j++)
			    {
			    	 temp=(Node)list3.get(j);
			    	 out.writeBytes(temp.info+temp.code);
			    	 out.writeBytes(en);			    		
			    }		 
				out.close();	 
				}
			catch(Exception E)
				{
					System.out.println("error!");
				}
			 
			}	
			new Warning("提示","保存密文");	
		    new Saveing();
		    }
		    catch(Exception E)
		    {
		    	new Warning("加密错误","加密出错");
		    }
		   	      
		}		
	  }
	class ConvertAction extends AbstractAction
	{
		public ConvertAction()
		{
			super("哈夫曼解密");
		}
		void openco()
		{
			int i = filechooser.showSaveDialog(Code.this);  
			if (i == JFileChooser.APPROVE_OPTION) 
				{   
				 try{		
					String s=new String();
					Node temp;
					list3=new LinkedList();
					char[] ctemp;
					File f = filechooser.getSelectedFile();  
					FileReader	in=new FileReader(f);
	    			BufferedReader bufferIn=new  BufferedReader(in);
	   			 while((s=bufferIn.readLine())!=null)
	 					{
	 					   ctemp=s.toCharArray();
	 					   temp=new Node(ctemp[0]);
	 					   for(i=1;i<s.length();i++)
	 					   {
	 					   	temp.addcode(ctemp[i]);		
	 					   } 
	 					   list3.add(temp); 				 			 
						}
						bufferIn.close();
						in.close();
						}		
				catch(Exception E)
					{
						new Warning("警告","解密异常");
					}
			 
				}
			else
				new Warning("警告","解密异常");		
				
		} 
		public void actionPerformed(ActionEvent e)
		{
		    new Warning("提示","打开密文");
		    new Opening();
		    new Warning("提示","打HUFFMAN密钥");
		    openco();
		    int i=0,j=0,k=0;
		    char s[]=textPane.getText().toCharArray();
		    Node temp=new Node();
		    String m=new String();
		    try
		    {	      
			  	for(i=0;i<textPane.getText().length();i++)
		   		 {
		    		for(j=0;j<list3.size();j++)
		    		{	
		    	   		temp=(Node)list3.get(j);
		    	   		char t[]=temp.code.toCharArray();
		    	  		for(k=0;k<temp.code.length();k++)
		    	     		{
		    	     			if(t[k]!=s[i+k])
		    	     	    	break;
		    	    		}
		    	  		if(k==temp.code.length())
		    	     	break;
		    		}
		    	 
		    		m=m+temp.info;
		       		i=i+k-1;		       		      
		   		 }
     	         textPane.setText(m);
		         new Warning("保存提示","如果需要请保存");
		         new Saveing();
			   		      		
		    }
		   catch(Exception E)
		   {
		   	new Warning("反编译出错","未找到编译密钥");
	
		   }		    	    
		     
		}
		} 		
	class PrintAction extends AbstractAction
		{
			public PrintAction()
			{
				super("打印哈夫曼树");
			}
			
			public void actionPerformed(ActionEvent e)
			{
				try
				{				 
				   if(TT.lchild==null&&TT.rchild==null)
				     new Warning("提示","尚未哈夫曼编码");
				   else
				   	new windowcan(TT);
				}
				catch(Exception E)
				{
					new Warning("错误","打印出错");
				}
				
			}
		}
	class RsasetcodeAction extends AbstractAction
	{
		int num1,num2,num3,num4;
		public RsasetcodeAction()
		{
			super("获得公钥私钥");
		}
		boolean  check(int num1,int num2)
	{
	int i;
	for(i=2;i<=num1&&i<=num2;i++)
		if(num1%i==0&&num2%i==0)
			return false;
    return true;			
	} 
		void  Findnum(int e)
		{
    	int i,j,s;
  		Random random = new Random();   
		j=Math.abs((random.nextInt()% e))+e;	 
		for(i=2;i<=Math.sqrt(j);i++)
		{
		if(j%i==0||j<15)  
		{	
			j=Math.abs((int)(random.nextInt()%e))+e;			
			i=1;    	
		}
		} 
		num1=j;	
		j=Math.abs((int)(random.nextInt()% e))+e;
   		for(i=2;i<=Math.sqrt(j);i++)
		{
		if(j%i==0||j==num1||j<15)  
		{	
			j=Math.abs((int)(random.nextInt()% e))+e;
			i=1;
		}	
		} 
		num2=j;	
		s=(num1-1)*(num2-1); 	
		for(i=s/10;i<s;i++)
			if(check(i,s))
			{
				num3=i;	
				break;
			}	
		for(j=2;;j++)	  	   
	  	 if(j*(num3)%s==1&&num3!=j)
	   	{
	   		num4=j;	   		
	   		break;
	   	}
	 
} 
		public void actionPerformed(ActionEvent e)
		{
			subwin=new JDialog();
           	subwin.setTitle("设置加密等级");
		  	subwin.setModal(true);
		  	subwin.setBounds(320,150,300,120);
		    text1=new JTextField(8);		   
			subwin.add(new JLabel("设置加密等级数字大于20小于1000"));
			subwin.add(text1);
			subwin.add(button1);
			subwin.add(button2);			
			FlowLayout flow=new FlowLayout();
 			subwin.setLayout(flow);      	 
    		subwin.setVisible(true);    		
    		subwin.validate(); 
    		if(rsasetflag)  
    		{ do
			{		
				Findnum(x); 			 			
			}while(num1*num2<(x-10)*(x-10)); 
			rsasetflag=false;
			subwin=new JDialog();
           	subwin.setTitle("生成公钥私钥");
		  	subwin.setModal(true);
		  	subwin.setBounds(320,150,180,120);		  		    	   
			subwin.add(new JLabel("公钥N="+String.valueOf(num1*num2)));		 
			subwin.add(new JLabel("公钥E="+String.valueOf(num4)));
			subwin.add(new JLabel("私钥N="+String.valueOf(num1*num2)));
			subwin.add(new JLabel("私钥D="+String.valueOf(num3)));
			button2.setText("确定"); 	
			subwin.add(button2);	 
		    flow=new FlowLayout();
 			subwin.setLayout(flow);      	 
    		subwin.setVisible(true);    		
    		subwin.validate();
			} 
    	 
		}
	}
	class RsasetAction  extends AbstractAction  		
	{	 
	public RsasetAction()
		{
			super("非对称加密");			 			 	 
		}	 
	void Clear()
		{
			for(int i=0;i<10000;i++)			 
				s[i]=0; 
		}
	void Mul(int s[],int m[],int n[])
	{
		int i,j,k,t,p;
		for(i=1;i<=n[0];i++)
		for(j=1;j<=m[0];j++)
		{
			k=i+j;
			t=(s[k-1]+m[j]*n[i])/10;
			s[k-1]=(s[k-1]+m[j]*n[i])%10;			 
			while(t!=0)
			{   
				p=(t+s[k])/10; 
				s[k]=(t+s[k])%10;
				t=p;
				k++;
			}
		} 
   		i=10000-1;
		while(s[i]==0)
			{
			--i;
			}
		s[0]=i;  
	}
	void Sublev(int m[],int n[])
	{
	int i;
	for(i=1;i<10000-1;i++)
	{       
	   if(m[i]<n[i])
			 {m[i]=m[i]+10;--m[i+1];}
	   m[i]=m[i]-n[i];
	} 
	i=10000-1;
	while(m[i]==0)
	{
		--i;
	}
	m[0]=i;    
	}
	void  Add(int m[],int n[])
	{
	int i,t,j;
	for(i=1;i<10000;i++)
	{
		m[i]=m[i]+n[i];
        t=m[i]/10;
		m[i]=m[i]%10;
		j=i;
		while(t!=0)
		{
			m[j+1]=m[j+1]+t;
			t=m[j+1]/10;
			m[j+1]=m[j+1]%10;			
			j++;
		}
	}
	i=10000-1;
	while(m[i]==0)
	{
		--i;
	}
	m[0]=i;  

}
 	void Exp(int s[],int m[],int n[])
	{
	int temp=0;	
	int i,j;
	int t[];
	t=new int[10000];
	for(i=0;i<10000;i++)
		t[i]=m[i];
	for(i=n[0];i>0;--i)
	    temp=temp*10+n[i];	 
	for(i=1;i<temp;i++)
	{
		Mul(s,t,m);
		for(j=0;j<10000;j++)
		{t[j]=s[j];s[j]=0;} 
	}
	for(j=0;j<10000;j++)
			s[j]=t[j]; 
	} 
	void  Divlev(int m[],int n[])
	{
	int s[],t[];
	s=new int[10000];
	t=new int[10000];	
	int temp=1;	
	rsa temp1=new rsa("10"); 
	rsa temp2=new rsa(String.valueOf(m[0]-n[0])); 
	Exp(s,temp1.Ddata,temp2.Ddata);  
	Mul(t,s,n); 	 
  	do
	{		 
		Sublev(m,t);	 
		if(m[10000-1]==-1)
		{			
			Add(m,t);
			if(t[0]==n[0])			
				{break;}		
			else
			{ 
			for(int i=1;i<t[0];i++)
				t[i]=t[i+1];
			t[t[0]]=0;
			t[0]-=1;			 
			}			
		}

⌨️ 快捷键说明

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