Java实现Base64加密

标签: Java二三事

慕课网学习笔记
参考很详细的 Java加密算法



第1章 概述

本课的内容:

  • 安全与密码
  • 常用安全体系介绍
  • 密码分类及java的安全组成
  • JDK相关包及第三方扩展
  • Base64算法介绍

如何学习

  • 掌握用法
  • 深入理解
  • 不断实践

一些资源

  • google
  • 维基百科:很多算法都有详细的介绍

密码常用术语

  • 明文:待加密信息
  • 密文:经过加密后的明文
  • 加密:明文转为密文的过程
  • 加密算法:明文转为密文的转换过程
  • 加密密钥:通过加密算法进行加密操作用的密钥
  • 解密:将密文转为明文的过程
  • 解密算法:密文转为明文的算法
  • 解密密钥:通过解密算法进行解密操作的密钥
  • 密码分析:截获密文者试图通过分析截获的密文从而推断出原来的明文或密钥的过程
  • 主动攻击:攻击者非法入侵密码系统,采用伪造、修改、删除等手段向系统注入假消息进行欺骗(对密文具有破坏作用)
  • 被动攻击:对一个保密系统采取截获密文并对其进行分析和攻击。(对密文没有破坏作用)
  • 密码体制:由明文空间、密文空间、密钥空间、加密算法和解密算法五部分构成。
  • 密码协议:也称安全协议,指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务
  • 密码系统:指用于加密、解密的系统
  • 科克霍夫原则:数据的安全基于密钥而不是算法的保密。即系统的安全取决于密钥,对密钥保密,对算法公开。————现代密码学设计的基本原则

加解密基础

  • 密码分类————时间
    • 古典密码:以字符为基础加密单元
    • 现代密码:以信息块为基本加密单元
  • 密码分类————保密内容算法
名称详细说明应用领域类别
受限制算法算法的保密性基于保持算法的秘密军事领域古典密码
基于密钥算法算法的保密性基于对密钥的保密现代密码

+ 密码分类————密码体制

名称别名详细说明
对称密码单钥密码或私钥密码指加密密钥与解密密钥相同
非对称密码双钥密码或公钥密码指加密密钥与解密密钥不同,密钥分为公钥,私钥
对称密码算法单钥算法或私钥算法指应用于对称密码的加密、解密的算法
非对称密码算法双钥密码或公钥密码算法指对应于非对称密码的加密、解密算法
  • 密码分类————明文处理方法

    • 分组密码:指加密时将明文分成固定长度的组,用同一密钥和算法对每一块加密,输出也是固定长度的密文。多用于网络加密
    • 流密码:也称序列密码。指加密时每次加密一位或一个字节
  • 散列函数

    • 主要用来验证数据的完整性
    • 特点:长度不受限制,哈希值容易计算
    • 散列运算过程不可逆
  • 散列函数相关的算法

    • 消息摘要算法MD5等
    • SHA————安全散列算法
    • MAC————消息认证码算法
  • 数字签名

    • 主要是针对以数字的形式存储的消息进行处理
  • OSI安全体系
    此处输入图片的描述

此处输入图片的描述

  • java安全组成

    • JCA(Java Cryptography Architecture)
    • JCE(Java Cryptography Extension)
    • JSSE(Java Secure Socket Extension)
    • JAAS(Java Authentication and Authentication Service)
    • 一些实现需要看JDK
  • 相关java包、类

    • java.security
      • 消息摘要
    • javax.crypto
      • 安全消息摘要,消息认证(鉴别)码
    • java.net.sll
      • 安全套接字

此处输入图片的描述

  • 第三方java扩展
    • Bouncy Castle(开源的)
    • Commons Codec(开源的)

第2章 Base64算法实现

  • Base64加密
    base64算法是基于64个字符的一种替换算法。base64加密的产生式电子邮件的“历史问题”——邮件只能传输ASCII码。base64加密的应用场景:email、密钥、证书文件。该算法可以由3种方式实现:JDK、Bouncy Castle、Commons Codec。

实现如下:

package base64;

import java.io.IOException;

import org.apache.commons.codec.binary.Base64;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * 该类是Base64算法的实现
 */

public class JavaBase64 {

    private static String src = "面向对象编程,object-oriented!@#*5"; // 需要加密的原始字符串

    public static void main(String[] args) throws IOException {
        System.out.println("原始字符串:\t\t\t" + src);
        System.out.println();
        jdkBase64();
        System.out.println();
        commonsCodecBase64();
        System.out.println();
        bouncyCastleBase64();
    }

    /** JDK实现Base64编码 */
    public static void jdkBase64() throws IOException{
        //如果这里没有出现sun的base64可以从Build Path中删除然后添加
        BASE64Encoder encoder = new BASE64Encoder();
        String encode = encoder.encode(src.getBytes());//编码

        BASE64Decoder decoder = new BASE64Decoder();
        String decode = new String(decoder.decodeBuffer(encode));//解码

        System.out.println("JDK实现的base64编码:\t\t" + encode);
        System.out.println("JDK实现的base64解码:\t\t" + decode);
    }

    /** Commons Codec实现base64编码 */
    public static void  commonsCodecBase64() {
        byte[] encode = Base64.encodeBase64(src.getBytes());
        byte[] decode = Base64.decodeBase64(encode);

        System.out.println("Commons Codec实现base64编码:\t" + new String(encode));
        System.out.println("Commons Codec实现base64解码:\t" + new String(decode));
    }

    /**Bouncy Castle实现base64编码 */
    public static void bouncyCastleBase64() {
        byte[] encode = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());
        byte[] decode = org.bouncycastle.util.encoders.Base64.decode(encode);

        System.out.println("Bouncy Castle实现base64编码:\t"+new String(encode));
        System.out.println("Bouncy Castle实现base64解码:\t"+new String(decode));
    }
}

运行结果:
此处输入图片的描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值