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

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

?? jfmauth.java

?? java郵件源程序
?? JAVA
字號:
/* * Created on 2004.08.17 * JFreeMail - Java mail component * Copyright (C) 2004 Dalibor Krleza *  * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. *  * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. *  * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */package org.jfreemail.core;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.BufferedOutputStream;import java.io.OutputStream;import java.net.Socket;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Vector;/** * Class used for server authentication. For now covered authentications * are PLAIN,LOGIN,APOP and CRAM-MD5. If you insist I can add other * authentications like DIGEST-MD5. I couldn't test CRAM-MD5 and * DIGEST-MD5, as I couldn't setup Sendmail with SASL autentication. * I'll apperciate if anybody could test CRAM-MD5 for SMTP. */public class JfmAuth {	/**	 * Constructor for constructing authentication object. This could be done	 * with static procedure. I realized authentication this way for future use.	 * @param client_socket Socket object for client connection.	 * @param auth_type Authentication type. Look in JfmConsts static attributes.	 * @param username User's username.	 * @param password User's secret. Deleted immediately after authentication.	 * @param challenge Passed challenge. If authentication type requires challenge. 	 * @throws AuthException Signaling authentication exception.	 */	public JfmAuth(Socket client_socket,int auth_type,	String username,String password,String challenge) 	throws AuthException {		if (username==null || password==null)			throw new AuthException("AUTH_001:No defined username or password");		if (client_socket==null)			throw new AuthException("AUTH_002:No active connection");		int retry=JfmConsts.AUTH_RETRY;		while(retry>=0) {			switch(auth_type) {				case JfmConsts.POP3_PLAIN: {					if (!pop3_plain(client_socket,username,password)) {						if (retry<1) {													try {								client_socket.close();							} catch(IOException exc1) {							}							throw new AuthException("AUTH_003:Authentication failed");						}					} else return;					break;				}				case JfmConsts.POP3_APOP: {					try {						if (!pop3_apop(client_socket,challenge,username,password)) {							if (retry<1) {								try {									client_socket.close();								} catch(IOException exc1) {								}								throw new AuthException("AUTH_003:Authentication failed");							}						} else return;					} catch(NoSuchAlgorithmException exc) {						try {							client_socket.close();						} catch(IOException exc1) {						}						throw new AuthException("AUTH_004:No MD5 algorithm");					}					break;				}				case JfmConsts.POP3_CRAM_MD5: {					try {						if (!pop3_cram_md5(client_socket,username,password)) {							if (retry<1) {								try {									client_socket.close();								} catch(IOException exc1) {								}								throw new AuthException("AUTH_003:Authentication failed");							}						} else return;					} catch(NoSuchAlgorithmException exc) {						throw new AuthException("AUTH_004:No MD5 algorithm");					}					break;				}				case JfmConsts.SMTP_LOGIN: {					if (!smtp_login(client_socket,username,password)) {						if (retry<1) {							try {								client_socket.close();							} catch(IOException exc1) {							}							throw new AuthException("AUTH_003:Authentication failed");						}					} else return;					break;				}				case JfmConsts.SMTP_CRAM_MD5: {					try {						if (!smtp_cram_md5(client_socket,username,password)) {							if (retry<1) {								try {									client_socket.close();								} catch(IOException exc1) {								}								throw new AuthException("AUTH_003:Authentication failed");							}						} else return;					} catch(NoSuchAlgorithmException exc) {						throw new AuthException("AUTH_004:No MD5 algorithm");					}					break;				}			}			retry--;			if (retry>=0) {				auth_type--;				if (auth_type==JfmConsts.POP3_NONE					|| auth_type==JfmConsts.SMTP_NONE)					throw new AuthException("AUTH_000:Exhaused all authentication types");			}		}	}		/*	 * Authentication for POP3 protocol. Plain authentication using username	 * and password. Doesn't require any encoding or challenge calculation!	 */	private boolean pop3_plain(Socket client_socket,String username,	String password) {		try {			OutputStream os=client_socket.getOutputStream();			String out1="USER "+username+String.valueOf((char)13)+String.valueOf((char)10);			os.write(out1.getBytes());			String in1=JfmSocketCore.getLine(client_socket)[0];			if (in1.indexOf(JfmConsts.POP3_OK)<0) return false;			String out2="PASS "+password+String.valueOf((char)13)+String.valueOf((char)10);			os.write(out2.getBytes());			in1=JfmSocketCore.getLine(client_socket)[0];			if (in1.indexOf(JfmConsts.POP3_OK)<0) return false;			return true;		} catch(IOException exc) {			return false;		}	}		/*	 * APOP authentication for POP3. Need challenge from POP3 server	 * for authentication. POP3 transmits challenge at the beginning of	 * communication. Challenge looks like <3873.2878733@server>.	 * We are adding password at the end of challenge and calculating	 * message digest. Message digest is then converted into hexadecimal	 * format and added like follows:	 * APOP username message-md5-digest	 */	private boolean pop3_apop(Socket client_socket,String challenge,	String username, String password) throws NoSuchAlgorithmException {		try {			OutputStream os=client_socket.getOutputStream();			MessageDigest md=MessageDigest.getInstance("MD5");			String out="APOP "+username+" ";			String temp_challenge=challenge;												out+=apop_md5(temp_challenge,password);			out+="\r\n";			os.write(out.getBytes());			String in=JfmSocketCore.getLine(client_socket)[0];			if (in.indexOf(JfmConsts.POP3_OK)<0) return false;			return true;		} catch(IOException exc) {			return false;		}	}	/*	 * CRAM-MD5 authentication for POP3. With AUTH CRAM-MD5 we	 * are requesting challenge from POP3 server. Challenge is base64	 * coded. After base64 decoding, challenge is in same format as for	 * APOP authentication. We are performing two complicated calculation	 * of MD5. Ending message digest i combined with username and base64	 * encoded. So encoded it's being transmited to POP3 server.	 * 	 * Same procedure is for SMTP CRAM-MD5 autentication!	 */	private boolean pop3_cram_md5(Socket client_socket,String username,	String password) throws NoSuchAlgorithmException {		try {			OutputStream os=client_socket.getOutputStream();			MessageDigest md=MessageDigest.getInstance("MD5");			String out="AUTH CRAM-MD5\r\n";			os.write(out.getBytes());			String challenge=JfmSocketCore.getLine(client_socket)[0];			challenge=challenge.substring(2,challenge.length()-2);			byte[] byte_challenge=JfmCore.base64decode(new String[] {challenge});			challenge="";			for(int i=0;i<byte_challenge.length;i++) if (byte_challenge[i]!=0) challenge+=(char)byte_challenge[i];												out=username+" "+cram_md5(challenge,password);			String[] out_list=JfmCore.base64encode(out.getBytes());			out=out_list[0]+"\r\n";			os.write(out.getBytes());			String in=JfmSocketCore.getLine(client_socket)[0];			if (in.indexOf(JfmConsts.POP3_OK)<0) return false;			return true;		} catch(IOException exc) {			return false;		}	}		/*	 * Login authentication for SMTP. Username and password are transmited	 * only base64 encoded.	 */	private boolean smtp_login(Socket client_socket,String username,	String password) {		try {			OutputStream os=client_socket.getOutputStream();			String out="AUTH LOGIN\r\n";			os.write(out.getBytes());			String in=JfmSocketCore.getLine(client_socket)[0];			if (in.charAt(0)=='4' || in.charAt(0)=='5') return false;			out=JfmCore.base64encode(username.getBytes())[0]+"\r\n";			os.write(out.getBytes());			in=JfmSocketCore.getLine(client_socket)[0];			if (in.charAt(0)=='4' || in.charAt(0)=='5') return false;			out=JfmCore.base64encode(password.getBytes())[0]+"\r\n";			os.write(out.getBytes());			in=JfmSocketCore.getLine(client_socket)[0];			if (in.charAt(0)=='4' || in.charAt(0)=='5') return false;			return true;		} catch(IOException exc) {			return false;		}	}		private String apop_md5(String challenge,String secret) 	throws NoSuchAlgorithmException {		MessageDigest md=MessageDigest.getInstance("MD5");		byte[] end_buffer=md.digest((challenge+secret).getBytes());		String end_string=new String("");		for(int i=0;i<16;i++) {			int ix=(int)(end_buffer[i] & 0x00FF);			if (ix>15) end_string+=Integer.toHexString(ix);			else end_string+="0"+Integer.toHexString(ix);		} 		return end_string;	}	/*	 * CRAM-MD5 authentication for SMTP. Not very different from POP3	 * CRAM-MD5. Only difference is in server responses.	 */	private boolean smtp_cram_md5(Socket client_socket,String username,	String password) throws NoSuchAlgorithmException {		try {			OutputStream os=client_socket.getOutputStream();			String out="AUTH CRAM-MD5\r\n";			os.write(out.getBytes());			String in=JfmSocketCore.getLine(client_socket)[0];			if (in.charAt(0)=='4' || in.charAt(0)=='5') return false;			in=in.substring(4,in.length()-2);			byte[] buffer=JfmCore.base64decode(new String[]{in});			out=new String();			for(int i=0;i<buffer.length;i++) out+=(char)buffer[i];			out=username+" "+cram_md5(out,password);			out=JfmCore.base64encode(out.getBytes())[0]+"\r\n";			os.write(out.getBytes());			in=JfmSocketCore.getLine(client_socket)[0];			if (in.charAt(0)=='4' || in.charAt(0)=='5') return false;			return true;		} catch(IOException exc) {			return false;		}	}		/* 	 * Basic CRAM-MD5 algorithm. RFC based. Looks like	 * MD5(secret XOR opad,MD(secret XOR ipad,challenge)).	 */	private String cram_md5(String challenge,String secret) 	throws NoSuchAlgorithmException {		byte[] secret_buffer1=expand128(secret);		byte[] secret_buffer2=expand128(secret);				for(int i=0;i<64;i++) {			secret_buffer1[i]^=(byte)0x36; //ipad			secret_buffer2[i]^=(byte)0x5C; //opad		}		for(int i=0;i<challenge.length();i++) secret_buffer1[i+64]=(byte)challenge.charAt(i);		MessageDigest md=MessageDigest.getInstance("MD5");		byte[] in1=new byte[64+challenge.length()];		for(int i=0;i<(64+challenge.length());i++) in1[i]=secret_buffer1[i];		byte[] mid_buffer=md.digest(in1);		for(int i=0;i<16;i++) secret_buffer2[i+64]=mid_buffer[i];		byte[] in2=new byte[80];		for(int i=0;i<80;i++) in2[i]=secret_buffer2[i];		byte[] end_buffer=md.digest(in2);		String end_string=new String("");		for(int i=0;i<16;i++) {			int ix=(int)(end_buffer[i] & 0x00FF);			if (ix>15) end_string+=Integer.toHexString(ix);			else end_string+="0"+Integer.toHexString(ix);		} 		return end_string;	}		/*	 * Procedure for expanding String buffer upto 128 bytes. 	 * Expanded bytes are set to 0!	 */	private byte[] expand128(String input) {		byte[] buffer=new byte[128];		for(int i=0;i<128;i++) buffer[i]=0;		int l=input.length();		if (l>64) l=64;		for(int i=0;i<l;i++) buffer[i]=(byte)input.charAt(i);		return buffer;	}		/*	 * Procedure for expanding byte buffer upto 128 bytes.	 * Expanded bytes are set to 0!	 */	private byte[] expand128(byte[] input) {		byte[] buffer=new byte[128];		for(int i=0;i<128;i++) buffer[i]=0;		int l=input.length;		if (l>64) l=64;		for(int i=0;i<l;i++) buffer[i]=input[i];		return buffer;	}	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美四级电影在线观看| 欧美片网站yy| 麻豆视频一区二区| 《视频一区视频二区| 欧美一级一级性生活免费录像| 成人三级伦理片| 日韩成人一级大片| 一区二区三区小说| 国产精品久久免费看| 精品国产免费一区二区三区四区| 色综合视频一区二区三区高清| 国产一区二区三区在线观看免费视频| 一区二区三区久久久| 国产亚洲成aⅴ人片在线观看 | 日日摸夜夜添夜夜添国产精品| 中文字幕av不卡| 久久综合狠狠综合久久综合88| 欧美日韩国产片| 色综合一个色综合| 成人手机在线视频| 国产精品亚洲午夜一区二区三区| 日本在线不卡视频| 亚洲一区二区不卡免费| 亚洲欧美成aⅴ人在线观看| 日本一区二区三级电影在线观看| 久久这里都是精品| 日韩精品一区二| 精品日韩欧美一区二区| 日韩一区二区在线播放| 3d动漫精品啪啪一区二区竹菊| 色综合久久天天| 色天使色偷偷av一区二区| 99久免费精品视频在线观看| 国产一区二区三区电影在线观看| 久久精品国产精品亚洲综合| 美女国产一区二区三区| 日本视频一区二区三区| 天天操天天色综合| 免费成人小视频| 免费观看成人av| 九九视频精品免费| 国内精品写真在线观看| 国产精品夜夜嗨| 懂色av噜噜一区二区三区av| 国产高清久久久久| 成人视屏免费看| 99精品黄色片免费大全| 色综合久久综合网97色综合 | 日韩欧美国产成人一区二区| 91精品国产综合久久小美女| 欧美成人一区二区三区| 精品国产乱码久久久久久夜甘婷婷| 日韩欧美国产高清| 国产无一区二区| 成人欧美一区二区三区白人| 一区二区三区高清| 日韩国产欧美三级| 国产乱码精品1区2区3区| 国产999精品久久久久久绿帽| 成人免费高清视频在线观看| 97se亚洲国产综合在线| 欧美在线free| 精品国产髙清在线看国产毛片| 2020国产精品| 最新欧美精品一区二区三区| 国产精品1024| 99精品视频在线播放观看| 色拍拍在线精品视频8848| 7777精品久久久大香线蕉| 精品国产91乱码一区二区三区| 国产日韩欧美综合在线| 亚洲女同女同女同女同女同69| 五月婷婷另类国产| 国产盗摄女厕一区二区三区| 欧美中文字幕亚洲一区二区va在线| 日韩一区二区三区视频在线| 久久精品水蜜桃av综合天堂| 一区二区三区不卡视频| 久久国产乱子精品免费女| 成人app在线| 91精品免费观看| 中文字幕色av一区二区三区| 亚洲成人av一区| 岛国精品一区二区| 欧美日韩中文精品| 国产亚洲视频系列| 洋洋成人永久网站入口| 激情综合色播五月| 一本色道久久综合亚洲91 | 自拍av一区二区三区| 午夜电影网亚洲视频| 成人一区二区三区视频在线观看 | 美腿丝袜亚洲综合| 99精品久久久久久| 亚洲精品一线二线三线无人区| 成人app网站| 欧美v日韩v国产v| 一区二区三区四区精品在线视频| 韩国毛片一区二区三区| 在线观看成人免费视频| 国产拍揄自揄精品视频麻豆| 亚洲第一主播视频| av电影在线观看完整版一区二区| 欧美丰满少妇xxxbbb| 亚洲欧洲综合另类在线| 国产一区欧美一区| 777色狠狠一区二区三区| 亚洲欧洲日韩一区二区三区| 国产毛片精品一区| 欧美一区二区三区系列电影| 亚洲免费伊人电影| 成人美女视频在线观看18| 日韩视频在线观看一区二区| 一区二区三区日韩欧美精品| 国产69精品久久久久毛片| 精品美女在线观看| 麻豆精品视频在线观看视频| 欧美艳星brazzers| 亚洲综合免费观看高清完整版在线 | 日韩伦理免费电影| 高清成人免费视频| 久久精品综合网| 久久国产精品第一页| 欧美精品久久一区| 婷婷中文字幕综合| 欧美日韩成人一区二区| 亚洲午夜国产一区99re久久| 在线日韩一区二区| 悠悠色在线精品| 一本色道久久综合精品竹菊| 中文字幕一区二区三区精华液| 国产成人免费视频网站| 久久亚洲私人国产精品va媚药| 六月婷婷色综合| 日韩欧美在线网站| 美女脱光内衣内裤视频久久网站 | 美女一区二区在线观看| 3d动漫精品啪啪1区2区免费| 日本va欧美va精品| 日韩欧美国产三级| 国产综合成人久久大片91| 精品国产91久久久久久久妲己| 国产一区二区精品在线观看| 精品国产乱码久久久久久久久| 韩国精品主播一区二区在线观看 | 久久午夜老司机| 国产盗摄一区二区三区| 国产精品欧美一区喷水| 丰满少妇久久久久久久| 国产精品免费视频观看| 日本韩国一区二区| 日本成人中文字幕在线视频 | 2023国产精华国产精品| 国产精品一区二区你懂的| 中文字幕成人在线观看| 91网站视频在线观看| 亚洲一区二区在线播放相泽| 制服丝袜中文字幕亚洲| 韩国精品主播一区二区在线观看| 国产午夜久久久久| 色噜噜夜夜夜综合网| 视频一区免费在线观看| 欧美精品一区二区三| 成人天堂资源www在线| 亚洲综合在线电影| 日韩精品在线网站| 成人激情视频网站| 亚洲成a人片在线不卡一二三区| 91精品国产欧美一区二区18| 国产精品亚洲午夜一区二区三区| 亚洲欧美偷拍三级| 欧美一区二视频| 国产aⅴ精品一区二区三区色成熟| 亚洲欧美经典视频| 欧美一区二区三区视频免费播放| 国产福利不卡视频| 亚洲午夜影视影院在线观看| 精品久久久久久最新网址| 99这里只有久久精品视频| 午夜欧美在线一二页| 久久免费视频一区| 欧美日韩综合在线免费观看| 精品一区二区三区免费| 亚洲人xxxx| 久久久天堂av| 欧美日韩在线亚洲一区蜜芽| 国产一区免费电影| 亚洲成av人片观看| 国产精品白丝在线| 欧美tickling网站挠脚心| 一本一道波多野结衣一区二区| 韩国欧美一区二区| 午夜精品久久久久影视| 国产精品免费av| 精品国产免费视频| 欧美猛男超大videosgay| 99久久国产综合精品色伊| 九色|91porny| 日韩电影一区二区三区四区| 亚洲视频在线观看一区|