Base64算法的编程使用

来源:互联网 发布:c语言的一些基础指令 编辑:程序博客网 时间:2024/06/03 22:47
最近在学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 = "18393817737@163.com";        String receiver = "1327876510@qq.com";        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();        }     }}
0 0
原创粉丝点击