加解密和编码

  1. 加解密和编码
    1. 加解密
      1. 一、对称加密
      2. 二、非对称加密
      3. 三、消息摘要算法
      4. 四、国密算法
    2. 编码
      1. 1. 文本编码格式
      2. 2. 数据编码格式
      3. 6. 其他编码格式

加解密和编码

加解密

一、对称加密

  • 定义:加密和解密使用同一个密钥。
  • 特点:加密和解密速度快,适合对大量数据进行加密;但密钥管理较为困难,因为需要在通信双方之间安全地共享密钥。
  • 常见算法
    • AES(Advanced Encryption Standard):高级加密标准,支持 128、192 和 256 位密钥长度,是一种高效且安全的对称加密算法。
    • DES(Data Encryption Standard):数据加密标准,密钥长度为 56 位,由于密钥长度较短,安全性较低,已不再推荐用于高安全性场合。
    • SM4:是中国的国家密码算法标准之一,属于分组密码算法,密钥长度为 128 位。

二、非对称加密

  • 定义:加密和解密使用不同的密钥,通常包括一个公钥和一个私钥。
  • 特点:安全性高,因为私钥不需要在网络上传输;但加密和解密速度较慢,不适合对大量数据进行加密。
  • 常见算法
    • RSA(Rivest–Shamir–Adleman):一种广泛使用的非对称加密算法,支持数据加密和数字签名,密钥长度通常为 1024、2048 或 4096 位。
    • SM2:是中国的国家密码算法标准之一,基于椭圆曲线密码学,提供数字签名和密钥交换功能。

三、消息摘要算法

  • 定义:将任意长度的数据转换为固定长度的哈希值,不可逆。
  • 特点:哈希值具有唯一性,可用于数据完整性校验、密码存储等。
  • 常见算法
    • MD5(Message Digest Algorithm 5):生成 128 位(16 字节)的哈希值,常用于文件校验、密码存储等,但已被认为不再足够安全。
    • SHA-1(Secure Hash Algorithm 1):生成 160 位(20 字节)的哈希值,比 MD5 更安全,但已被认为不再足够安全。
    • SHA-256:生成 256 位(32 字节)的哈希值,是 SHA-2 系列中的一种,被广泛认为是安全的哈希算法。
    • SM3:是中国的国家密码算法标准之一,生成 256 位的哈希值,用于数据完整性校验和数字签名。

四、国密算法

  • 定义:国密算法是中国国家密码管理局制定的一系列密码算法标准,包括对称加密、非对称加密和消息摘要算法。
  • 特点:国密算法具有较高的安全性和自主可控性,适用于对数据安全要求较高的场景,如金融、政务等领域。
  • 常见算法
    • SM2:非对称加密算法,基于椭圆曲线密码学,提供数字签名和密钥交换功能。
    • SM3:消息摘要算法,生成 256 位的哈希值,用于数据完整性校验和数字签名。
    • SM4:对称加密算法,密钥长度为 128 位,用于数据加密和解密。

编码

1. 文本编码格式

文本编码用于表示字符数据,常见格式包括:

  • ASCII:最早的字符编码标准,使用7位表示128个字符。
  • Unicode:支持全球字符集的编码标准,常见实现有:
    • UTF-8:变长编码,兼容ASCII。
    • UTF-16:使用2或4字节表示字符。
    • UTF-32:固定4字节表示字符。
  • ISO/IEC 8859:一系列单字节编码标准,如ISO-8859-1(Latin-1)。
  • GB2312/GBK/GB18030:中文字符编码标准。
  • Shift_JIS:日文字符编码。
  • EUC-KR:韩文字符编码。

2. 数据编码格式

用于结构化数据的编码,常见格式包括:

  • JSON:轻量级的数据交换格式。
  • XML:可扩展标记语言,用于结构化数据。
  • YAML:人类可读的数据序列化格式。
  • CSV:逗号分隔值格式,用于表格数据。
  • Protocol Buffers:谷歌开发的高效二进制编码格式。
  • MessagePack:二进制序列化格式。
  • BSON:JSON的二进制扩展格式。

6. 其他编码格式

  • Base64:将二进制数据编码为ASCII字符。
import cn.hutool.core.codec.Base64;

// Base64 编码
String original = "Hello, Hutool!";
String encoded = Base64.encode(original);
System.out.println("Base64 编码结果: " + encoded);

// Base64 解码
String decoded = Base64.decodeStr(encoded);
System.out.println("Base64 解码结果: " + decoded);
  • Hex:十六进制编码。
import cn.hutool.core.util.HexUtil;

// Hex 编码
String original = "Hello, Hutool!";
String encoded = HexUtil.encodeHexStr(original);
System.out.println("Hex 编码结果: " + encoded);

// Hex 解码
String decoded = HexUtil.decodeHexStr(encoded);
System.out.println("Hex 解码结果: " + decoded);
  • URL 编码
import cn.hutool.core.util.URLUtil;

// URL 编码
String original = "https://example.com/search?q=Hutool 工具";
String encoded = URLUtil.encode(original);
System.out.println("URL 编码结果: " + encoded);

// URL 解码
String decoded = URLUtil.decode(encoded);
System.out.println("URL 解码结果: " + decoded);
  • Unicode 编码
import cn.hutool.core.util.EscapeUtil;

// Unicode 编码
String original = "Hello, Hutool!";
String encoded = EscapeUtil.escape(original);
System.out.println("Unicode 编码结果: " + encoded);

// Unicode 解码
String decoded = EscapeUtil.unescape(encoded);
System.out.println("Unicode 解码结果: " + decoded);

日夜颠倒头发少 ,单纯好骗恋爱脑 ,会背九九乘法表 ,下雨只会往家跑 ,搭讪只会说你好 ---- 2050781802@qq.com

×

喜欢就点赞,疼爱就打赏

相册 说点什么 简历