加密解密

对称加密算法

  • 加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。

非对称加密算法

  • 加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为RSA、ECC和EIGamal。

AES简介

  • 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥

实际开发中,一般是通过RSA加密AES的密钥,传输到接收方,接收方解密得到AES密钥,然后发送方和接收方用AES密钥来通信。

  • ECB 加密
  • CBC 加密 增加了iv 向量;
  • sm4234 sm234

base 64

  • Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的
  • Base64除了能将Binary资料可视化之外,也常用来表示字串加密过后的内容

Java 8的java.util套件

final String text = "你好 世界";
final Base64.Decoder decoder = Base64.getDecoder();
final Base64.Encoder encoder = Base64.getEncoder();
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));

DES

       //DES对称加密/解密
        //要求key至少长度为8个字符
        String key = "123456789";

        /**
         * DES 加密
         *
         * {@link java.util.Base64}
         */
        byte[] encode_bytes = EnDecoderUtil.DESEncrypt(key, text);
//---->        通过 base 64 编码---->
        System.out.println(Base64.getEncoder().encodeToString(encode_bytes));
        //解密
         byte[] decode_bytes = EnDecoderUtil.DESDecrypt(key, encode_bytes);
        System.out.println(new String(decode_bytes,StandardCharsets.UTF_8));
//---->        反向解码
        byte[] decode = Base64.getDecoder().decode("/M5qXTK2wdlYT8iOCiu5OQ==");
        byte[] decrypt = EnDecoderUtil.DESDecrypt(key, decode);
        System.out.println("EnDecoderUtil.DESDecrypt(key,bytes) = " + new String(decrypt,StandardCharsets.UTF_8));