简介
# 📚简介
Hutool的编码解码模块提供了丰富的编码解码功能,涵盖了多种编码算法和哈希算法,为Java开发者提供了便捷的编码解码解决方案。该模块包含多个子模块,分别处理不同类型的编码解码需求。
# 🏗️核心结构
# 1. 模块划分
| 模块 | 主要职责 | 核心类/接口 |
|---|---|---|
| 根模块 | 基础编码算法 | Encoder、Decoder、Caesar、Rot、Morse、Luhn等 |
| binary | 二进制编码解码 | Base64、Hex、Base32、Base58、Base62等 |
| hash | 哈希算法 | HashUtil、MurmurHash、CityHash、Simhash等 |
# 2. 核心功能分类
# 基础编码
- 凯撒密码:
Caesar- 经典的替换加密算法 - ROT编码:
Rot- ROT13、ROT47等字符轮换编码 - 摩尔斯电码:
Morse- 摩尔斯电码编解码 - Luhn算法:
Luhn- “模10”算法,是一种简单的校验和(Checksum)算法 - Hashids:
Hashids- 将数字转换为短字符串的编码算法 - PunyCode:
PunyCode- 国际化域名编码 - PercentCodec:
PercentCodec- URL百分比编码 - 进制转换:
RadixUtil- 不同进制之间的转换
# 二进制编码
- Base64:
Base64- 最常用的二进制编码 - Base16/Hex:
Hex- 十六进制编码 - Base32:
Base32- Base32编码,包括标准Base32和Crockford Base32 - Base58:
Base58- 比特币等加密货币使用的编码 - Base62:
Base62- 使用字母和数字的编码 - Z85:
Z85Codec- ZeroMQ使用的编码
# 哈希算法
- 工具类:
HashUtil- 提供各种哈希算法的便捷方法 - MurmurHash:
MurmurHash- 高性能哈希算法 - CityHash:
CityHash- Google的CityHash算法 - Simhash:
Simhash- 相似度哈希,用于文本去重 - 一致性哈希:
ConsistentHash- 分布式系统常用的哈希算法 - KetamaHash:
KetamaHash- Memcached使用的哈希算法
# 🚀快速开始
# 1. 基础编码示例
# 凯撒密码
// 凯撒密码加密
String encrypted = Caesar.encrypt("Hello Hutool", 3);
// 解密
String decrypted = Caesar.decrypt(encrypted, 3);
Console.log(encrypted); // Khoor #xwrro
Console.log(decrypted); // Hello Hutool
# ROT13编码
// ROT13编码/解码
String text = "Hello Hutool";
String encoded = Rot.rot13(text);
String decoded = Rot.rot13(encoded); // ROT13编码和解码是同一个操作
Console.log(encoded); // Uryyb Uhgbby
Console.log(decoded); // Hello Hutool
# 摩尔斯电码
// 摩尔斯电码编码
String morseCode = Morse.encode("HELLO");
// 解码
String text = Morse.decode(morseCode);
Console.log(morseCode); // .... . .-.. .-.. ---
Console.log(text); // HELLO
# 2. 二进制编码示例
# Base64编码
// Base64编码
String base64 = Base64.encode("Hello Hutool");
// 解码
String text = Base64.decodeStr(base64);
Console.log(base64); // SGVsbG8gSHV0b29s
Console.log(text); // Hello Hutool
# Hex编码
// Hex编码
String hex = Hex.encodeHexStr("Hello Hutool");
// 解码
String text = Hex.decodeHexStr(hex);
Console.log(hex); // 48656c6c6f204875746f6f6c
Console.log(text); // Hello Hutool
# Base58编码
// Base58编码
String base58 = Base58.encode("Hello Hutool");
// 解码
String text = StrUtil.str(Base58.decode(base58), CharsetUtil.CHARSET_UTF_8);
Console.log(base58); // Cn8eVZg
Console.log(text); // Hello Hutool
# 3. 哈希算法示例
# MD5哈希
// MD5哈希
String md5 = HashUtil.md5Hex("Hello Hutool");
Console.log(md5); // 1e61360d5e3552e7d8ed530c79ec69c9
# SHA-256哈希
// SHA-256哈希
String sha256 = HashUtil.sha256Hex("Hello Hutool");
Console.log(sha256); // f5a7924e621e84c9280a9a27e1bcb7f654b18476d2588f26e170c3db7f8a584c
# MurmurHash
// MurmurHash3 32位
int murmur32 = HashUtil.murmur32("Hello Hutool");
// MurmurHash3 128位
long[] murmur128 = HashUtil.murmur3_128("Hello Hutool");
Console.log(murmur32); // 143624574
Console.log(Arrays.toString(murmur128)); // [2066547334, -1606525350]
# 🎯设计优势
- 全面覆盖:涵盖了几乎所有常用的编码解码算法和哈希算法
- 简单易用:提供简洁的API,一行代码即可完成复杂的编码解码操作
- 高性能:底层实现经过优化,性能优异
- 可扩展性强:采用接口设计,便于扩展新的编码算法
- 线程安全:所有工具类都是线程安全的,可以在多线程环境下安全使用
- 无外部依赖:纯Java实现,无外部依赖
# 📌注意事项
- 字符编码:在进行编解码操作时,注意指定正确的字符编码,避免乱码
- 性能考虑:对于大量数据的编解码,考虑使用流式处理
- 安全性:某些编码算法(如Base64)并不是加密算法,不能用于敏感数据保护
- 哈希碰撞:任何哈希算法都存在碰撞的可能,对于安全要求高的场景,建议使用加密哈希算法
- 版本兼容性:不同版本的 Hutool 可能对某些算法的实现有所调整,注意版本兼容性
# 📚相关文档
通过 Hutool 的编码解码模块,您可以轻松处理各种编码解码需求,从简单的Base64编码到复杂的哈希算法,都能找到相应的工具类和方法。该模块设计简洁易用,性能优异,是Java开发者处理编码解码问题的得力助手。