Base64算法的编程使用

最近在学Java加密算法的编程使用,,为了加深自己的印象,特意再次回顾一下,做到温故而知新!
既然学习Java加密算法,首先得知道什么是密码学?
  1. 密码学的基本功能:机密性、鉴别、报文完整性、不可否认性。(不可否认性是啥子呢)
  2. 基本模型:
    基本加密解密的流程
  3. Java密码学算法的分类
    消息编码:Base64
    消息摘要:MD类、SHA类、MAC
    对称密码:DES、3DES、AES
    非对称密码:RSA、DH密钥交换
    数字签名:RSASignature、DSASignature
    本文基本就从以上地算法进行回顾。。
  4. 密码学五元组:
    明文、密文、加密算法、解密算法、秘钥
    注意:加解密算法都是公开的,但秘钥是不可公开的,否则就失去的加密的意义。秘钥不等于密码,密码等于秘钥加规则,,规则可以理解为算法。

  5. 对称密码(传统密码)与非对称密码
    对称密码:加解密使用相同的秘钥的密码体系
    非对称密码:加解密使用不同的秘钥—-公钥和私钥

  6. Java编程中常用的类
    1)消息编码
    BASE64Encoder、BASE64Decoder
    2)消息摘要
    MessageDigest
    3)对称密码
    KeyGenerator、SecretKey、Cipher
    4)非对称密码
    KeyPairGenerator、KeyFactory、KeyPair、PublicKey、PrivateKey、Cipher
    5)数字签名
    Signature

一、Base64算法定义
Base64开始是应用于解决电子邮件传输问题,是一种基于64个字符的编码算法,以任意8位字节序列组合的描述形式,这种形式不易直接识别。经Base64编码后的字符串的字符数是以4为单位的整数倍。
二、Base64的字符映射表
base64的字符映射表
三、Base64的加解密编程

Base64算法在JDk中有BASE64Encoder()和BASE64Encoder

1)加密:
byte[] data = “jikexueyuan”.getBytes();
String result = new BASE64Encoder().encode(data);

2)解密:
byte[] result = new BASE64Decoder().decodeBuffer(data);

使用Base64算法模拟邮箱登录系统

package key.base64;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 使用base64编码制作邮件发送系统
 * 
 * @author mike
 *
 */
public class STMPMain {
    public static void main(String[] args) {
        // 邮箱账号和密码
        String sender = "[email protected]";
        String receiver = "[email protected]";
        String password = "lalalalla";// sender账号的密码

        // 将用户名和密码进行base64编码
        String userBase64 = Base64Util.encryptBase64(sender.substring(0, sender.indexOf('@')).getBytes());
        String passwordBase64=Base64Util.encryptBase64(password.getBytes());
        //定义socket的25号端口远程连接邮箱服务器
        Socket socket;
        try {
            socket = new Socket("smtp.163.com", 25);
            //定义输入流用来读取服务器返回给我们的信息
            InputStream inputStream=socket.getInputStream();
            BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
            //输出流用来向服务器发送相应的信息
            OutputStream outputStream=socket.getOutputStream();
            PrintWriter writer=new PrintWriter(outputStream,true);//自动刷新输出流
            //打印邮箱服务器返回的信息
            System.out.println(reader.readLine());

            //HELO  与邮箱服务器打个招呼并告知客户端使用的机器,可以随便填写
            writer.println("HELO hi");
            System.out.println(reader.readLine());//服务器响应的结果

            //AUTO LOGIN >>>base64
            writer.println("AUTH LOGIN");//使用身份认证登录指令
            System.out.println(reader.readLine());
            writer.println(userBase64);//发送加密过的用户名登录
            System.out.println("user:"+userBase64);
            System.out.println(reader.readLine());
            System.out.println("password:"+passwordBase64);
            writer.println(passwordBase64);//发送加密过的密码
            System.out.println(reader.readLine());

            //如果没有问题表示认证登录成功
            System.out.println("登陆成功!");


            //SET MAIL FROM AND RCPT TO
            writer.println("MAIL FROM:<"+sender+">");//发送发送方的邮箱给服务器
            System.out.println(reader.readLine());
            writer.println("RCPT TO:<"+receiver+">");//发送接收方的信息给邮箱服务器
            System.out.println(reader.readLine());

            //SET DATA
            writer.println("DATA");
            System.out.println(reader.readLine());

            writer.println("SUBJECT:嘱咐你学习的邮件");
            writer.println("FROM:"+sender);
            writer.println("TO:"+receiver);
            writer.println("Content-Type:text/plain;charset=\"utf-8\"");
            writer.println();
            writer.println("好好学习,天天向上!good good study,day day up!");
            writer.println(".");//以.作为结尾
            writer.println("");
            System.out.println(reader.readLine());


            //中断和服务器的连接
            writer.println("RSET");
            System.out.println(reader.readLine());
            writer.println("QUIT");
            System.out.println(reader.readLine());

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }
}

猜你喜欢

转载自blog.csdn.net/dongfangjunqi/article/details/50808970