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

📄 decode.java

📁 java实现网络数据包还原 很完整 直接可以运行 网络数据包还原
💻 JAVA
字号:
//package mypub;
import java.io.*;
public class Decode
{   
    static int num=0;
   	public char DecodeAscII(String hex)  //八位,一个字节,
	{
	    StringToInt to=new StringToInt(); 
	    int i=to.HexStringToInt(hex);//调用HexStringToInt
	    return (char)i;
	}
	
	public String DecodeGB2312(String in) 
    { 
        StringToInt to=new StringToInt();   
        String a=String.valueOf(in.charAt(0));
	  	String b=String.valueOf(in.charAt(1));
	  	String hex=a+b;
	    int i=to.HexStringToInt(hex);
	  	String c=String.valueOf(in.charAt(2));
	  	String d=String.valueOf(in.charAt(3));
	  	hex=c+d;
	    int j=to.HexStringToInt(hex);
        byte bytes[] = {(byte)i,(byte)j};
    	String s="";
    	try
    	{
    		s=new String(bytes,"gb2312");
    	}
    	catch(UnsupportedEncodingException e) 
        { 
           System.out.println (e.toString()); 
        }
        return s; 
    }

    public String Decodebig5(String in) 
    { 
        StringToInt to=new StringToInt();   
        String a=String.valueOf(in.charAt(0));
	  	String b=String.valueOf(in.charAt(1));
	  	String hex=a+b;
	    int i=to.HexStringToInt(hex);
	  	String c=String.valueOf(in.charAt(2));
	  	String d=String.valueOf(in.charAt(3));
	  	hex=c+d;
	    int j=to.HexStringToInt(hex);
        byte bytes[] = {(byte)i,(byte)j};
    	String s="";
    	try
    	{
    		s=new String(bytes,"big5");
    	}
    	catch(UnsupportedEncodingException e) 
        { 
           System.out.println (e.toString()); 
        }
        return s; 
    }
    
     public String DecodeUTF(String s)  //传过来的是16进制
    {
    	UnicodeStringToInt toInt=new UnicodeStringToInt();
    	String r="";
    	int len=s.length();
    	for(int i=0;i<len;i+=6)
    	{
    	  String temp="";
    	  String a=String.valueOf(s.charAt(i+0));
	  	  String b=String.valueOf(s.charAt(i+1));
	  	  String hex=a+b;
	      int x=toInt.UnicodeStringToInt(hex);
	  	  a=String.valueOf(s.charAt(i+2));
	  	  b=String.valueOf(s.charAt(i+3));
	  	  hex=a+b;
	      int y=toInt.UnicodeStringToInt(hex);
	      a=String.valueOf(s.charAt(i+4));
	  	  b=String.valueOf(s.charAt(i+5));
	  	  hex=a+b;
	      int z=toInt.UnicodeStringToInt(hex);
          byte bytes[] = {(byte)x,(byte)y,(byte)z};
    	  try
    	  {
    		temp=new String(bytes,"utf-8");
    	  }
    	  catch(UnsupportedEncodingException e) 
          { 
             System.out.println (e.toString()); 
          }
          r=r+temp;
         }
         return r;
    } 
     
    public String ToDecode(String input)  //第一步
    {
    	
    	Decode d=new Decode();
	  	String result="",h="";
	  	if(input=="")return result;
	  	int count=0;
	  	int len=input.length();
	  	String hex[]=new String[len/2];
	  	EncodeMethod m=new EncodeMethod();  //EncodeMethod
	  	String method=m.method(input);
	  	int num=0;
	  	for(int i=0;i<input.length();i+=2)
	  	{   String temp="";
	   	   	temp=temp+String.valueOf(input.charAt(i));
	    	temp=temp+String.valueOf(input.charAt(i+1));
	    	hex[num]=temp;//num表示字节的个数
	  		num++;
	  	}
	  	   
	   if(method=="big5")
	   {
	   	 for(int j=0;j<num;j++)//每次加一个字节
	     	{
	    		
	    		char c=hex[j].charAt(0);
	  			char e=hex[j].charAt(1);
	  		
	  			switch(c)
	  			{    
	  	    		case '8':
	  	    		case '9':
	  				case 'A':
	  				case 'B':
	  				case 'C':
	  				case 'D':
	  				case 'E':
	  				case 'F':
	  				
	  				{
	  					int i=j+1;
	  				char u=hex[i].charAt(0);
	  			    char v=hex[i].charAt(1);	
	  				  if(u>='4'&&u<='7'||u>='A'&&u<='F')
	  					{
	  							String str=hex[j]+hex[i];//两个字节16位,呵呵
	  						    result=result+d.Decodebig5(str);
	  					        
	  					} 	
	  				 else	
	  					{
	  						result=result+d.DecodeAscII(hex[j]);
	  					    result=result+d.DecodeAscII(hex[i]);
	  				    }
	  				    
	  				    ++j;
	  						
	  				} break;//为什么是高8位是从8开始呢?因为0x80~0xFF是中文字符表示范围
	  				default:result=result+d.DecodeAscII(hex[j]);break;
	  			} 
	     	}
	   	
	   	}
	   if(method=="gb2312")
	  	{
	     	for(int j=0;j<num;j++)
	     	{
	  			char c=hex[j].charAt(0);
	  			switch(c)
	  			{    
	  	    		case '8':
	  	    		case '9':
	  				case 'A':
	  				case 'B':
	  				case 'C':
	  				case 'D':
	  				case 'E':
	  				case 'F':
	  				{
	  					count++;
	  					if((count%2)!=0) 
	  					{
	  						if(j<num-1)
	  						{
	  							String str=hex[j]+hex[j+1];//两个字节16位,呵呵
	  						    result=result+d.DecodeGB2312(str);
	  						}	
	  					} 
	  				} break;//为什么是高8位是从8开始呢?因为0x80~0xFF是中文字符表示范围
	  				default:result=result+d.DecodeAscII(hex[j]);break;
	  			} 
	     	}
	   }
	   
	   if(method=="utf-8")
	  	{
	     	for(int j=0;j<num;j++)
	     	{
	  			     char a=hex[j].charAt(0);
	  			   //  char b=hex[j].charAt(1);
	  			     
	  			switch(a)
	  			{
	  				case'0':h="0000";break;
	  				case'1':h="0001";break;
	  				case'2':h="0010";break;
	  				case'3':h="0011";break;
	  				case'4':h="0100";break;
	  				case'5':h="0101";break;
	  				case'6':h="0110";break;
	  				case'7':h="0111";break;
	  				case'8':h="1000";break;
	  				case'9':h="1001";break;
	  				case'A':h="1010";break;
	  				case'B':h="1011";break;
	  				case'C':h="1100";break;
	  				case'D':h="1101";break;
	  				case'E':h="1110";break;
	  				case'F':h="1111";break;
	  			}
	  			
	  		     if(h.startsWith("1110"))
	  				  {
	  				  String str=hex[j]+hex[j+1]+hex[j+2];
	  				  result=result+d.DecodeUTF(str);	
	  				  	j+=2;	
	  				  }
	  				
	  			else
	  			      result=result+d.DecodeAscII(hex[j]);
	  			 	
	  			}

	  			
	  			} 
	     return result;	
	   }
	     
	public static void  main(String args[])//static 必须在void 之前
	{ 
	  String input="3C21444F43545950452048544D4C205055424C494320222D2F2F5733432F2F4454442048544D4C20342E3031205472616E736974696F6E616C2F2F454E222022687474703A2F2F7777772E7733632E6F72672F54522F313939392F5245432D68746D6C3430312D31393939313232342F6C6F6F73652E647464223E0D0A3C212D2D2073617665642066726F6D2075726C3D283030353929687474703A2F2F7777772D3132382E69626D2E636F6D2F646576656C6F706572776F726B732F636E2F6A6176612F6A6176615F6368696E6573652F202D2D3E0D0A3C48544D4C206C616E673D7A682D434E20786D6C3A6C616E673D227A682D434E22200D0A786D6C6E733D22687474703A2F2F7777772E77332E6F72672F313939392F7868746D6C223E3C484541443E3C5449544C453E4A61766120E7BC96E7A88BE68A80E69CAFE4B8ADE6B189E5AD97E997AEE9A298E79A84E58886E69E90E58F8AE8A7A3E586B33C2F5449544C453E0D0A3C4D45544120687474702D65717569763D436F6E74656E742D5479706520636F6E74656E743D22746578742F68746D6C3B20636861727365743D5554462D38223E0D0A3C4D45544120687474702D65717569763D504943532D4C6162656C200D0A636F6E74656E743D2728504943532D312E312022687474703A2F2F7777772E696372612E6F72672F726174696E67737630322E68746D6C22206C2067656E207472756520722028637A2031206C7A2031206E7A2031206F7A203120767A2031292022687474703A2F2F7777772E727361632E6F72672F726174696E67737630312E68746D6C22206C2067656E2074727565207220286E20302073203020762030206C2030292022687474703A2F2F7777772E636C6173736966792E6F72672F73616665737572662F22206C2067656E20747275652072202853537E7E30303020312929273E3C4C494E4B200D0A687265663D22687474703A2F2F7075726C2E6F72672F44432F656C656D656E74732F312E302F222072656C3D736368656D612E44433E3C4C494E4B200D0A687265663D22687474703A2F2F7777772E69626D2E636F6D2F66617669636F6E2E69636F222072656C3D2253484F52544355542049434F4E223E0D0A3C4D45544120636F6E74656E743D647740636E2E69626D2E636F6D206E616D653D4F776E65723E0D0A3C4D45544120736368656D653D7266633137363620636F6E74656E743D7A682D434E206E616D653D44432E4C616E67756167653E0D0A3C4D45544120636F6E74656E743D636E206E616D653D49424D2E436F756E7472793E0D0A3C4D45544120636F6E74656E743D5075626C6963206E616D653D53656375726974793E0D0A3C4D455441200D0A636F6E74656E743D22E59CA8E59FBAE4BA8E204A61766120E8AFADE8A880E79A84E7BC96E7A88BE4B8ADEFBC8CE68891E4BBACE7BB8FE5B8B8E7A2B0E588B0E6B189E5AD97E79A84E5A484E79086E58F8AE698BEE7A4BAE79A84E997AEE9A298E38082E4B880E5A4A7E5A086E79C8BE4B88DE68782E79A84E4B9B1E7A081E882AFE5AE9AE4B88DE698AFE68891E4BBACE684BFE6848FE79C8BE588B0E79A84E698BEE7A4BAE69588E69E9CEFBC8CE6808EE6A0B7E6898DE883BDE5A49FE8AEA9E982A3E4BA9BE6B189E5AD97E6ADA3E7A1AEE698BEE7A4BAE591A2EFBC9F4A617661E8AFADE8A880E9BB98E8AEA4E79A84E7BC96E7A081E696B9E5BC8FE698AF554E49434F4445EFBC8CE8808CE68891E4BBACE4B8ADE59BBDE4BABAE9809AE5B8B8E4BDBFE794A8E79A84E69687E4BBB6E5928CE695B0E68DAEE5BA93E983BDE698AFE59FBAE4BA8E474232333132E68896E8808542494735E7AD89E696B9E5BC8FE7BC96E7A081E79A84EFBC8CE6808EE6A0B7E6898DE883BDE5A49FE681B0E5BD93E59CB0E98089E68BA9E6B189E5AD97E7BC96E7A081E696B9E5BC8FE5B9B6E6ADA3E7A1AEE59CB0E5A484E79086E6B189E5AD97E79A84E7BC96E7A081E591A2EFBC9FE69CACE69687E5B086E4BB8EE6B189E5AD97E7BC96E7A081E79A84E5B8B8E8AF86E585A5E6898BEFBC8CE7BB93E590884A617661E7BC96E7A88BE5AE9EE4BE8BEFBC8CE58886E69E90E4BBA5E4B88AE4B8A4E4B8AAE997AEE9A298E5B9B6E68F90E587BAE8A7A3E586B3E5AE83E4BBACE79A84E696B9E6A188E3808222200D0A6E616D653D41627374726163743E0D0A3C4D455441200D0A";
	  
	  Decode d=new Decode();
	  String result=d.ToDecode(input); //ToDecode
	  File myFile=new File("result.txt");
	  try
	  {
	  	byte[] b=result.getBytes();
	  	FileOutputStream fout=new FileOutputStream(myFile);
	  	fout.write(b);
	  	fout.close();
	  }
	  catch(FileNotFoundException e)
	  {
	  	System.err.println(e);
	  }
	  catch(IOException e)
	  {
	  	System.err.println(e);
	  }
	  System.out.println("The Decode result is :\n"+result);
	}
}
class StringToInt  //被调用
{
	public int HexStringToInt(String hex) 
	{
	    String a=String.valueOf(hex.charAt(0));
	  	String b=String.valueOf(hex.charAt(1));
	  	char c=hex.charAt(0);
	  	char d=hex.charAt(1);
	  	int h=0;
	  	switch(c)
	  	{
	  		case 'A':h=10*16;break;
	  		case 'B':h=11*16;break;
	  		case 'C':h=12*16;break;
	  		case 'D':h=13*16;break;
	  		case 'E':h=14*16;break;
	  		case 'F':h=15*16;break;
	  		default:h=Integer.parseInt(a)*16;break;
	  	} 
	    switch(d)
	  	{
	  		case 'A':h=h+10;break;
	  		case 'B':h=h+11;break;
	  		case 'C':h=h+12;break;
	  		case 'D':h=h+13;break;
	  		case 'E':h=h+14;break;
	  		case 'F':h=h+15;break;
	  		default:h=h+Integer.parseInt(b);break;
	  	} 
	    return h;
	}
}
class UnicodeStringToInt
{
	public int UnicodeStringToInt(String hex)
	{
	    String a=String.valueOf(hex.charAt(0));
	  	String b=String.valueOf(hex.charAt(1));
	  	char c=hex.charAt(0);
	  	char d=hex.charAt(1);

	  	int r=0;
	  
	  	switch(c)
	  	{
	  		case 'A':r=r+10*16;break;
	  		case 'B':r=r+11*16;break;
	  		case 'C':r=r+12*16;break;
	  		case 'D':r=r+13*16;break;
	  		case 'E':r=r+14*16;break;
	  		case 'F':r=r+15*16;break;
	  		default:r=r+Integer.parseInt(a)*16;break;
	  	} 
	    switch(d)
	  	{
	  		case 'A':r=r+10;break;
	  		case 'B':r=r+11;break;
	  		case 'C':r=r+12;break;
	  		case 'D':r=r+13;break;
	  		case 'E':r=r+14;break;
	  		case 'F':r=r+15;break;
	  		default:r=r+Integer.parseInt(b);break;
	  	} 
	    return r;
	}
}
class EncodeMethod  //第二步
{
	public String method(String s)
	{
	  Decode de=new Decode();  //调用编码
	  String result="";
	  int num=0;
	  int len=s.length();
	  String hex[]=new String[len/2];
	  for(int i=0;i<s.length();i+=2)
	  { String temp="";
	    temp=temp+String.valueOf(s.charAt(i));
	    temp=temp+String.valueOf(s.charAt(i+1));
	    hex[num]=temp;
	  	num++;
	  }
	  for(int j=0;j<num;j++)
	  {
	  	result=result+de.DecodeAscII(hex[j]);  //调用DecodeAscII
	  }
	  
	  int i=result.indexOf("charset=gb2312");
	  if(i!=-1)
	 { 
	  System.out.println("charset=gb2312");return "gb2312";
	 }
	  i=result.indexOf("charset=utf-8");
	  if(i!=-1)
	  {System.out.println("Content-Encoding: utf-8");return "utf-8";
	 }
	  i=result.indexOf("charset=big5");
	  if(i!=-1)
	  {System.out.println("Content-Encoding: big5");return "big5";
	 }
	  return "utf-8";
	}
}

⌨️ 快捷键说明

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