亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ssl_with_signature.java

?? 身份認證和數字簽名在實際應用中是通過以數字證書為核心的公開密鑰基礎結構(PKI)來實現的
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
        //開始解包
        //int pack_len=(new Byte(buffer[3])).intValue() * 256 +(new Byte(buffer[4])).intValue();
        //以下邏輯用于解決當byte大于128時轉換成int會變成負數的問題
        int pack_len = 0;
        if(buffer[3]>=0){
        	pack_len = buffer[3];
        }
        else
        {
        	pack_len = buffer[3] & 127 + 128;
        }
        pack_len=pack_len <<8;
        if(buffer[4]>=0){
        	pack_len += buffer[4];
        }
        else
        {
        	pack_len += buffer[4] & 127 + 128;
        }
        Show_Debug_Message("pack_len="+Integer.toString(pack_len));
        if(pack_len != recv_len-5){
                Show_Message("接收到簽名請求信息的長度不對!");
                //組Signature_alert包
   		buffer[0]=SSLSignatureType.signature_alert;
        	buffer[1]=ProtocolVersion.major;
        	buffer[2]=ProtocolVersion.minor;
        	buffer[3]=0;   //長度高字節
        	buffer[4]=0;   //長度低字節
        	int p=5;    //用于定位
                //random字段全部填0
                buffer[p++]=0;
        	buffer[p++]=0;
        	buffer[p++]=0;
        	buffer[p++]=0;
        	buffer[p++]=0;
        	for(int i=0;i<28;++i)buffer[p++]=0;
        	//警告類型
        	buffer[p++]=Signature_Alert_type.Format_error;  //消息格式錯誤
        	byte[] return_message="Wrong Data Format".getBytes();
        	//警告原因
        	for(int i=0;i<return_message.length;i++)buffer[p++]=return_message[i];
        	buffer[3]=(byte)(((p-5)>>8) % 256);   //長度不包括開頭的5個字節
        	buffer[4]=(byte)((p-5) % 256);
        	SSL_with_signature.send(socket,buffer,p);   //向對方發送數據
        	SSL_with_signature.Show_Buffer_Hex("向"+remote_host+"發送Signature_alert包!(len="+Integer.toString(p)+")",buffer,p);
        	try{
        	 socket.close();   //關閉socket
        	} catch (IOException e)
        	{
        		callback.CatchError("關閉socket出錯",e);
        	}
                return ;
        }
        if(buffer[0] !=	SSLSignatureType.signature_request){
        	Show_Debug_Message("接收到簽名請求信息格式錯誤!");
        	//組Signature_alert包
   		buffer[0]=SSLSignatureType.signature_alert;
        	buffer[1]=ProtocolVersion.major;
        	buffer[2]=ProtocolVersion.minor;
        	buffer[3]=0;   //長度高字節
        	buffer[4]=0;   //長度低字節
        	int p=5;    //用于定位
                //random字段全部填0
                buffer[p++]=0;
        	buffer[p++]=0;
        	buffer[p++]=0;
        	buffer[p++]=0;
        	buffer[p++]=0;
        	for(int i=0;i<28;++i)buffer[p++]=0;
        	//警告類型
        	buffer[p++]=Signature_Alert_type.Format_error;  //消息格式錯誤
        	byte[] return_message="Wrong Data Format".getBytes();
        	//警告原因
        	for(int i=0;i<return_message.length;i++)buffer[p++]=return_message[i];
        	buffer[3]=(byte)(((p-5)>>8) % 256);   //長度不包括開頭的5個字節
        	buffer[4]=(byte)((p-5) % 256);
        	SSL_with_signature.send(socket,buffer,p);   //向對方發送數據
        	SSL_with_signature.Show_Buffer_Hex("向"+remote_host+"發送Signature_alert包!(len="+Integer.toString(p)+")",buffer,p);
        	try{
        	 socket.close();   //關閉socket
        	} catch (IOException e)
        	{
        		callback.CatchError("關閉socket出錯",e);
	       	}
	       	callback.CatchError("消息格式錯誤", new Exception("接收到簽名請求信息格式錯誤!"));
        	return;
        }
        try
        {
         //解釋請求數據,以下兩個變量用于得到對方的隨機數
         long gmt_unix_time=0;
         byte[] random_bytes=new byte[28];
         //gmt_unix_time=((new Byte(buffer[5])).longValue() << 24)+((new Byte(buffer[6])).longValue() << 16)+((new Byte(buffer[7])).longValue() << 8)+(new Byte(buffer[8])).longValue();  
         //以下邏輯用于解決當byte大于128時轉換成long會變成負數的問題
         if(buffer[5]>=0){
        	gmt_unix_time = buffer[5];
         }
         else
         {
        	gmt_unix_time = buffer[5] & 127 + 128;
         }
         gmt_unix_time = gmt_unix_time <<8;
         
         if(buffer[6]>=0){
        	gmt_unix_time += buffer[6];
         }
         else
         {
        	gmt_unix_time += buffer[6] & 127 + 128;
         }
         gmt_unix_time = gmt_unix_time <<8;
         
         if(buffer[7]>=0){
        	gmt_unix_time += buffer[7];
         }
         else
         {
        	gmt_unix_time += buffer[7] & 127 + 128;
         }
         gmt_unix_time = gmt_unix_time <<8;
         
         if(buffer[8]>=0){
        	gmt_unix_time += buffer[8];
         }
         else
         {
        	gmt_unix_time += buffer[8] & 127 + 128;
         }
         gmt_unix_time = gmt_unix_time <<8;
         
         if(buffer[9]>=0){
        	gmt_unix_time += buffer[9];
         }
         else
         {
        	gmt_unix_time += buffer[9] & 127 + 128;
         }
         Show_Debug_Message("gmt_unix_time ="+Long.toString(gmt_unix_time));
         int p=10; //用于定位
         for(int i=0;i<28;i++)random_bytes[i]=buffer[p++];
         SSLRandom sslrand=new SSLRandom(gmt_unix_time,random_bytes);   //恢復隨機數
   	 //結果填充到Signature_request結構
   	 S_request.random=sslrand;
   	 //S_request.signdata_desc_length=(new Byte(buffer[p++])).intValue() * 256 + (new Byte(buffer[p++])).intValue();
   	 //以下邏輯用于解決byte轉換成int時高位為1變成負數的問題
         int signdata_desc_length = 0;
         if(buffer[p]>=0){
               	signdata_desc_length = buffer[p];
         }
         else
         {
              	signdata_desc_length = buffer[p] & 127 + 128;
         }
         signdata_desc_length = signdata_desc_length <<8; 
         p++;
         if(buffer[p]>=0){
               	signdata_desc_length = buffer[p];
         }
         else
         {
               	signdata_desc_length = buffer[p] & 127 + 128;
         }
         p++;
         S_request.signdata_desc_length = signdata_desc_length;
   	 Show_Debug_Message("signdata_desc_length="+Integer.toString(S_request.signdata_desc_length));
   	 S_request.signdata_desc=new byte[S_request.signdata_desc_length];
   	 for(int i=0;i<S_request.signdata_desc_length;i++)S_request.signdata_desc[i]=buffer[p++];
   	 //S_request.signdata_length=(new Byte(buffer[p++])).intValue() * 256 + (new Byte(buffer[p++])).intValue();
   	 int signdata_length = 0;
         if(buffer[p]>=0){
               	signdata_length = buffer[p];
         }
         else
         {
              	signdata_length = buffer[p] & 127 + 128;
         }
         signdata_length = signdata_length <<8; 
         p++;
         if(buffer[p]>=0){
               	signdata_length = buffer[p];
         }
         else
         {
               	signdata_length = buffer[p] & 127 + 128;
         }
         p++;
         S_request.signdata_length = signdata_length;
   	 Show_Debug_Message("signdata_length="+Integer.toString(S_request.signdata_length));
   	 S_request.signdata=new byte[S_request.signdata_length];
   	 for(int i=0;i<S_request.signdata_length;i++)S_request.signdata[i]=buffer[p++];
   	 
   	 byte signatureAlgorithm=buffer[p++];   //簽名算法
         //int s_length=(new Byte(buffer[p++])).intValue();             //簽名值的長度
         int s_length = 0;
         if(buffer[p]>=0){
               	s_length = buffer[p];
         }
         else
         {
               	s_length = buffer[p] & 127 + 128;
         }
         p++;
         Show_Debug_Message("s_length="+Integer.toString(s_length));
         byte[] signatureValue=new byte[s_length];
         for(int i=0;i<s_length;i++)signatureValue[i]=buffer[p++];
   	 DSignature dsignature=new DSignature(signatureAlgorithm,s_length,signatureValue);
   	 S_request.request_signature=dsignature;
   	} catch ( Exception e)
   	{
   		System.err.println("解釋Signature_request包出錯:" + e.getMessage());
	    	e.printStackTrace();
	    	//組Signature_alert包
   		buffer[0]=SSLSignatureType.signature_alert;
        	buffer[1]=ProtocolVersion.major;
        	buffer[2]=ProtocolVersion.minor;
        	buffer[3]=0;   //長度高字節
        	buffer[4]=0;   //長度低字節
        	int p=5;    //用于定位
                //random字段
                buffer[p++]=(byte)((S_request.random.gmt_unix_time>>32) % 256);  //從UINT32 -> UINT40
                buffer[p++]=(byte)((S_request.random.gmt_unix_time>>24) % 256);
        	buffer[p++]=(byte)((S_request.random.gmt_unix_time>>16) % 256);
        	buffer[p++]=(byte)((S_request.random.gmt_unix_time>>8) % 256);
        	buffer[p++]=(byte)(S_request.random.gmt_unix_time % 256);
        	for(int i=0;i<28;++i)buffer[p++]=S_request.random.random_bytes[i];
        	//警告類型
        	buffer[p++]=Signature_Alert_type.System_interal_error;  //系統故障
        	byte[] return_message="Encounter the system interal error.Can not explain your request.".getBytes();
        	//警告原因
        	for(int i=0;i<return_message.length;++i)buffer[p++]=return_message[i];
        	buffer[3]=(byte)(((p-5)>>8) % 256);   //長度不包括開頭的5個字節
        	buffer[4]=(byte)((p-5) % 256);
        	SSL_with_signature.send(socket,buffer,p);   //向對方發送數據
        	SSL_with_signature.Show_Buffer_Hex("向"+remote_host+"發送Signature_alert包!(len="+Integer.toString(p)+")",buffer,p);
        	try{
        		socket.close();   //關閉socket
        	} catch (IOException e1)
        	{
        		callback.CatchError("關閉socket出錯" , e);
        	}
        	callback.CatchError("消息格式錯誤", new Exception("解釋簽名請求包導致系統出錯"));
   	      	return ;
   	}
   	if (RandomUsed(S_request.random))  //檢查隨機數是否已經用過,用于防止重放攻擊
   	{
   		//組Signature_alert包
   		buffer[0]=SSLSignatureType.signature_alert;
        	buffer[1]=ProtocolVersion.major;
        	buffer[2]=ProtocolVersion.minor;
        	buffer[3]=0;   //長度高字節
        	buffer[4]=0;   //長度低字節
        	int p=5;    //用于定位
                //random字段
                buffer[p++]=(byte)((S_request.random.gmt_unix_time>>32) % 256);  //從UINT32 -> UINT40
                buffer[p++]=(byte)((S_request.random.gmt_unix_time>>24) % 256);
        	buffer[p++]=(byte)((S_request.random.gmt_unix_time>>16) % 256);
        	buffer[p++]=(byte)((S_request.random.gmt_unix_time>>8) % 256);
        	buffer[p++]=(byte)(S_request.random.gmt_unix_time % 256);
        	for(int i=0;i<28;++i)buffer[p++]=S_request.random.random_bytes[i];
        	//警告類型
        	buffer[p++]=Signature_Alert_type.Illegal_random;  //非法隨機數
        	byte[] return_message="Illegal random".getBytes();
        	//警告原因
        	for(int i=0;i<return_message.length;++i)buffer[p++]=return_message[i];
        	buffer[3]=(byte)(((p-5)>>8) % 256);   //長度不包括開頭的5個字節
        	buffer[4]=(byte)((p-5) % 256);
        	SSL_with_signature.send(socket,buffer,p);   //向對方發送數據
        	SSL_with_signature.Show_Buffer_Hex("向"+remote_host+"發送Signature_alert包!(len="+Integer.toString(p)+")",buffer,p);
        	try{
        	 socket.close();   //關閉socket
        	} catch (IOException e)
        	{
        		callback.CatchError("關閉socket出錯" , e);
        	}
        	callback.CatchError("可能受到重放攻擊", new Exception("簽名請求的隨機數剛才用過"));
        	return;
   	}
   	 boolean Verify_Requester_Signature_OK=false;   //驗證通過的標志
   	try{
   	 byte request_data[]=new byte[S_request.signdata_desc_length+S_request.signdata_length];   //簽名請求的數據
         for(int i=0;i<S_request.signdata_desc_length;++i)request_data[i]=S_request.signdata_desc[i];
         for(int i=0;i<S_request.signdata_length;++i)request_data[i+S_request.signdata_desc_length]=S_request.signdata[i];
   	 Verify_Requester_Signature_OK=S_request.request_signature.Verify(request_data,partner_publickey);
   	} catch (Exception e)
   	{
   	    callback.CatchError("驗證對方簽名時出錯",e);
	    return;
   	}
   	
   	 if(Verify_Requester_Signature_OK){   //用對方的公鑰驗證對簽名請求的簽名
   	      
   	      //選擇簽名算法,同時檢查自己的私鑰是否有生成簽名的能力
   	      byte sign_algorithm=0;
   	      if(my_privatekey.getAlgorithm().equals("RSA"))
    		  sign_algorithm=SignatureAlgorithm.md5RSA;
    		else
    		 if(my_privatekey.getAlgorithm().equals("DSA"))
    		  sign_algorithm=SignatureAlgorithm.sha1DSA;
    		    else
    		    {   //受限與SSL協議,暫時不支持其他的公鑰簽名算法
    		    	//組Signature_alert包
   			buffer[0]=SSLSignatureType.signature_alert;
        		buffer[1]=ProtocolVersion.major;
        		buffer[2]=ProtocolVersion.minor;
        		buffer[3]=0;   //長度高字節
        		buffer[4]=0;   //長度低字節
    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线精品视频小说1| 日本久久精品电影| 欧美老年两性高潮| 亚洲图片欧美激情| 国产综合色在线| 欧美精品一二三区| 一区二区三区在线观看国产| 国产一区二区不卡| 欧美一区二区三区啪啪| 一区二区三区不卡视频| 丁香天五香天堂综合| 日韩精品一区二区在线观看| 午夜精品久久久久久久| 色一情一乱一乱一91av| 国产精品久久久99| 国产成人一区二区精品非洲| 欧美大片在线观看| 免费观看一级特黄欧美大片| 欧美日韩高清在线播放| 一区二区高清免费观看影视大全 | 久久久久九九视频| 日本伊人色综合网| 欧美高清视频不卡网| 一区二区三区产品免费精品久久75| 成人免费视频一区| 国产色综合久久| 国产精品一区免费视频| 久久伊99综合婷婷久久伊| 麻豆免费看一区二区三区| 91精品麻豆日日躁夜夜躁| 亚洲成av人片一区二区| 欧美日韩精品免费| 亚洲成人av资源| 欧美精品tushy高清| 天天影视色香欲综合网老头| 欧美精品日韩综合在线| 天涯成人国产亚洲精品一区av| 欧美男人的天堂一二区| 亚洲国产裸拍裸体视频在线观看乱了 | 麻豆中文一区二区| 欧美一区二区不卡视频| 日本vs亚洲vs韩国一区三区 | 欧美亚洲综合久久| 亚洲国产视频直播| 欧美精品日日鲁夜夜添| 日本欧美在线观看| 日韩欧美国产wwwww| 激情图片小说一区| 久久精品网站免费观看| 成人综合在线观看| 成人免费在线视频| 日本韩国精品一区二区在线观看| 亚洲激情中文1区| 欧美美女一区二区三区| 免费av网站大全久久| 精品国产乱码91久久久久久网站| 国产毛片一区二区| 国产精品三级视频| 色天天综合久久久久综合片| 五月激情六月综合| 日韩视频一区二区| 国产麻豆精品theporn| 国产精品欧美经典| 欧美亚洲精品一区| 人人爽香蕉精品| 国产欧美久久久精品影院| 91视频一区二区| 天天操天天色综合| 精品欧美一区二区三区精品久久 | 免费看精品久久片| 国产午夜精品在线观看| 色综合久久88色综合天天| 午夜私人影院久久久久| 2欧美一区二区三区在线观看视频| 成人免费视频一区| 亚洲成人免费视| 久久久噜噜噜久久中文字幕色伊伊| aaa欧美日韩| 肉色丝袜一区二区| 亚洲国产精品t66y| 欧美日韩国产综合久久| 韩国v欧美v日本v亚洲v| 亚洲丝袜另类动漫二区| 欧美日韩一区二区在线观看| 黑人精品欧美一区二区蜜桃| 中文字幕一区二| 91精品国产高清一区二区三区蜜臀| 国产一区二区三区高清播放| 一区二区三区精品| 久久久久久夜精品精品免费| 欧美在线三级电影| 国产精品一区二区久久精品爱涩| 亚洲精品成人悠悠色影视| 日韩欧美亚洲一区二区| 色综合天天狠狠| 黄网站免费久久| 一区二区三区国产精华| 久久蜜桃av一区精品变态类天堂 | 精品va天堂亚洲国产| 91麻豆精品视频| 狠狠色丁香久久婷婷综合_中| 一区二区三区欧美日韩| 国产性做久久久久久| 欧美精品乱人伦久久久久久| 不卡的电影网站| 久久99国产精品免费| 夜夜夜精品看看| 欧美国产日产图区| 日韩视频免费观看高清在线视频| 91老司机福利 在线| 国产精品一区二区黑丝| 蜜臀久久99精品久久久久久9| 亚洲免费av观看| 国产精品午夜免费| 精品国精品国产| 在线播放91灌醉迷j高跟美女| 成人av免费在线| 国产一区日韩二区欧美三区| 视频一区视频二区中文字幕| 亚洲欧美国产三级| 中文字幕av不卡| 欧美va亚洲va国产综合| 欧美日韩国产首页在线观看| 91视频免费播放| 成人一区二区视频| 极品瑜伽女神91| 日韩国产一区二| 五月婷婷综合激情| 一区二区在线观看不卡| 国产精品三级视频| 国产免费成人在线视频| 久久综合狠狠综合久久综合88| 6080午夜不卡| 欧美日韩视频专区在线播放| 色诱亚洲精品久久久久久| 成人妖精视频yjsp地址| 国产精品一级二级三级| 狠狠色丁香婷综合久久| 久久99精品久久久久久| 麻豆国产一区二区| 久久综合综合久久综合| 强制捆绑调教一区二区| 人人超碰91尤物精品国产| 三级欧美韩日大片在线看| 天天色综合天天| 日日噜噜夜夜狠狠视频欧美人 | 亚洲一区免费视频| 一区二区三区四区国产精品| 亚洲日本一区二区| 亚洲人成在线观看一区二区| 亚洲人精品午夜| 一区二区视频在线| 亚洲一级片在线观看| 亚洲动漫第一页| 婷婷综合在线观看| 日韩高清中文字幕一区| 另类小说图片综合网| 激情丁香综合五月| 国产成人自拍在线| 成人免费视频一区| 99re这里都是精品| 91麻豆自制传媒国产之光| 色丁香久综合在线久综合在线观看| 在线亚洲免费视频| 欧美日韩国产影片| 欧美一级片在线看| 精品少妇一区二区三区| 国产日韩欧美综合在线| 国产精品麻豆99久久久久久| 亚洲另类春色国产| 丝袜诱惑亚洲看片| 国内精品第一页| 成人av中文字幕| 在线精品国精品国产尤物884a| 欧美午夜不卡在线观看免费| 91精品国产综合久久精品| 欧美成人精精品一区二区频| 国产日韩视频一区二区三区| 亚洲欧美偷拍卡通变态| 亚洲国产中文字幕在线视频综合| 日韩av一区二区三区四区| 国产一区二三区| 波多野结衣视频一区| 欧美少妇一区二区| 日韩天堂在线观看| 久久久不卡影院| 亚洲精品国产视频| 美女www一区二区| 高清不卡一区二区| 在线一区二区三区四区五区| 日韩一区二区三区免费看 | 5858s免费视频成人| 337p日本欧洲亚洲大胆精品| 亚洲欧洲一区二区在线播放| 香蕉久久一区二区不卡无毒影院| 国产一区二区三区在线观看免费| 91一区二区在线| 欧美一区二区三区公司| 欧美激情综合五月色丁香小说| 亚洲自拍另类综合|