Java--Base64与消息摘要算法

Base64本质不是加密码算法。
安全和密码
常用安全体系
对称加密:指加密密钥与解密密钥相同。
非对称加密:指加密密钥与解密密钥不同,密钥分公钥、私钥。
散列函数:用来验证数据的完整性。
特点:长度不受限制,哈希值容易计算,散列运算过程不可逆。
比如:消息摘要算法MD5等,SHA–安全散列算法,MAC–消息认证算法。

数字签名:主要是针对以数字的形式存储的消息进行的处理。

Base64算法
E-mail、密钥、证书文件
邮件的历史问题,在网络传输过程中,如果为非ASCII码则会出现乱码问题,
定义:基于64个字符的编码算法,

/**
     * 基于JDK
     */
    public static void jdkBase64(String src){
        BASE64Encoder encoder=new BASE64Encoder();
        String encode = encoder.encode(src.getBytes());
        System.out.println("encode:"+encode);

        BASE64Decoder decoder=new BASE64Decoder();
        try {
            System.out.println("decode:"+new String(decoder.decodeBuffer(encode)));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 基于commons
     */
    public static void commonsCodesBase64(String src){
        byte[] encodeBytes= Base64.encodeBase64(src.getBytes());
        System.out.println("encode:"+new String(encodeBytes));

        byte[] decodeBytes = Base64.decodeBase64(encodeBytes);
        System.out.println("decode:"+new String(decodeBytes));
    }

DES:
密钥长度为56.

消息摘要算法
MD应用场景:
在这里插入图片描述
JDK代码实现:

public static void jdkMd5(String src){
        try {
            MessageDigest md=MessageDigest.getInstance("MD5");
            byte[] md5Bytes=md.digest(src.getBytes());
            System.out.println("JDK MD5:"+Hex.encodeHexString(md5Bytes));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

SHA
安全散列算法
固定长度摘要算法
在这里插入图片描述
实现:

/**
     * JDK实现
     */
    public static void jdkSHA1(String src){
        try {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(src.getBytes());
            System.out.println("jdk sha-1:"+ Hex.encodeHexString(md.digest()));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

在这里插入图片描述

MAC
HMAC含有密钥的消息摘要算法。

public static void jdkHmacMD5(String src){
        try {
            //初始化
            KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacMD5");
            SecretKey secretKey = keyGenerator.generateKey();
            //获取密钥----密钥不同,加密后的结果不同
            byte[] key=Hex.decodeHex(new char[]{'a','a','a','a','a','a','a','a'});
            //还原密钥
            SecretKey restoreSecretKey=new SecretKeySpec(key,"HmacMD5");
            //实例化MAC
            Mac mac= Mac.getInstance(restoreSecretKey.getAlgorithm());
            mac.init(restoreSecretKey);
            byte[] hmacMD5bytes = mac.doFinal(src.getBytes());
            System.out.println("JDK hmacMD5:"+ Hex.encodeHexString(hmacMD5bytes));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
        } catch (DecoderException e) {
        }
    }

学习自某课网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值