Base64是一种基于64个字符的编码算法,以任意8位字节序列组合的描述形式,这种形式不易直接识别。经Base64编码后的字符串的字符数是以4为单位的整数倍
package com.cry.base64; import java.io.IOException; import Decoder.BASE64Decoder; import Decoder.BASE64Encoder; public class Base64Util { /** * base64加密 * @param data * @return */ public static String encryptBase64(byte[] data) { return new BASE64Encoder().encode(data); } /** * base64解密 * @param data * @return * @throws IOException */ public static String decryptBase64(String data) throws IOException { byte[] resultBytes = new BASE64Decoder().decodeBuffer(data); return new String(resultBytes); } public static void main(String args[]) throws IOException { String data = "测试base64"; String encodeData = Base64Util.encryptBase64(data.getBytes()); System.out.println("加密后>>>" + encodeData); System.out.println("解密后>>" + Base64Util.decryptBase64(encodeData)); ; } }
base64早期用于邮件传输,用于解决乱码问题。
可以通过telnet 进行邮件传输,首先开启telnet服务,然后以管理员形式打开cmd然后输入:telnet smtp.163.com 25 然后回车进入以下界面:
输入HELO 回车,然后输入AUTH LOGIN回车,输入用户名(base64)回车,输入密码(base64)回车提示成功;
输入MAIL FROM:<xxx1@163.com> 回车
输入RCPT TO:<xxx2@163.com>回车
输入DATA
输入subject : xxxxx
from:xxx1@163.com
to:xxx2@163.com
…..
如图:
package com.cry.base64; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; public class SMTPMain { public static void main(String[] args) { // 用户名密码 String sender = "xxx1@163.com"; String receiver = "xxx2@163.com"; String password = "password"; // 将用户名和密码进行Base64编码 String userBase64 = Base64Util.encryptBase64(sender.substring(0, sender.indexOf("@")).getBytes()); String passBase64 = Base64Util.encryptBase64(password.getBytes()); try { Socket socket = new Socket("smtp.163.com", 25); InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader( inputStream)); PrintWriter writter = new PrintWriter(outputStream, true); System.out.println(reader.readLine()); // writter.println("test base64"); System.out.println(reader.readLine()); // AUTH LOGIN >>>Base64 writter.println("AUTH LOGIN"); System.out.println(reader.readLine()); writter.println(userBase64); System.out.println(reader.readLine()); writter.println(passBase64); System.out.println(reader.readLine()); // 设置 "MAIL FROM" 和 "RCPT TO" writter.println("MAIL FROM:<" + sender + ">"); System.out.println(reader.readLine()); writter.println("RCPT TO:<" + receiver + ">"); System.out.println(reader.readLine()); // 设置 "DATA" writter.println("DATA"); System.out.println(reader.readLine()); writter.println("SUBJECT:hello test"); writter.println("FROM:" + sender); writter.println("TO:" + receiver); writter.println("Content-Type: text/plain;charset=\"gb2312\""); writter.println(); writter.println("hello world!"); writter.println("."); writter.println(""); System.out.println(reader.readLine()); // over 断开connect writter.println("RSET"); System.out.println(reader.readLine()); writter.println("QUIT"); System.out.println(reader.readLine()); } catch (Exception e) { e.printStackTrace(); } } }