关于加解密中运用Base64编码有问题的那些事!!!

我是在学习des加密的过程中,有一步

String enConde = Base64.encode(bytes)

bytes数组中存放的是DES加密后密文的字节数组,因为字节中出现了负数,ASCII码中不能对应,然后老师要求使用Base64编码,但我的编译器显示这步有问题,而且和老师导的包不一样,只有一个

java.util.Base64;

这个包
在这里插入图片描述

然后,我查了好久好久,书上是这么说的:

原本上BASE64的编码器和解码器都是在sun.misc组件中的,因为它没有在java.*的包中,所以在java新的版本中它的位置可能发生变化(刚好我现在的Java版本就是最新的,所以我意识到,有情况)

然后我仔细研究了一下java.util.Base64;
在这里插入图片描述

大概就是base64中定义了两个静态内部类

Encoder和Decoder

在这里插入图片描述

Base64.getEncoder()

方法就返回了一个Encoder对象

然后我在jdk文档中点入了Encoder这个静态内部类

在这里插入图片描述

Encode类中有这么些方法

在这里插入图片描述

哈哈哈就出来了,果然,遇事不决看文档,啥都能解决,嘿嘿嘿

所以,将字节数组转变位base64的编码的具体代码为:

导的包为java.util.Base64

String encode = Base64.getEncoder().encodeToString(bytes)

然后下面是我的des加密

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;


public class DesDemo {
    public static void main(String[] args) throws  Exception {
        //明文
        String plainText = "硅谷";
        //密钥(des的密钥必须是八个字节)
        String key = "12345678";

        //创建加密对象
        Cipher des = Cipher.getInstance("des");//参数表示选择的算法

        //创建加密规则
        //第一个参数表示:表示key的字节
        //第二个参数表示:加密的类型
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "des");

        //进行加密初始化
        //第一个参数表示模式(加密模式、解密模式)
        //第二个参数表示加密的规则(即上面创建的加密规则)
        des.init(des.ENCRYPT_MODE,secretKeySpec);

        //调用方法加密
        //参数表示明文的字节数组
        byte[] bytes = des.doFinal(plainText.getBytes());
        //直接打印密文,如果出现乱码,是因为在编码表(ACSLL)上找不到对应的字符
//        System.out.println(new String(bytes));
        //将每个字节的十进制打印出来
//        for (byte aByte : bytes) {
//            System.out.println(aByte);
//        }

//        String  encode = Base64.encode(byres);
//        System.out.println(encode);

        //Base64 当前java jdk是15
        String encode = Base64.getEncoder().encodeToString(bytes);
        System.out.println(encode);
    }
}

然后解密的代码就是先把得到的字符串密文Base64解码,得到最初DES加密后的字节数组,然后再对字节数组DES解密


```java
  	    des.init(Cipher.DECRYPT_MODE,secretKeySpec);
        byte[] text = des.doFinal(Base64.getDecoder().decode(encode));
        System.out.println("DES解密得到的明文:"+new String(text));

运行结果:
在这里插入图片描述

搞完,崩撤卖溜
(小声BB,i am java初学者,如果我理解的有问题,还请指教)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值