2025-04-08 12:49:19 +08:00
|
|
|
|
# MD5 工具包
|
|
|
|
|
|
|
|
|
|
这个包提供了全面的 MD5 哈希功能,包括字符串加密、文件加密、链式操作、加盐哈希等。
|
|
|
|
|
|
|
|
|
|
## 主要功能
|
|
|
|
|
|
|
|
|
|
- 字符串和字节切片的 MD5 哈希计算
|
|
|
|
|
- 文件 MD5 哈希计算(支持大文件分块处理)
|
|
|
|
|
- 链式 API,支持构建复杂的哈希内容
|
|
|
|
|
- 带盐值的 MD5 哈希,提高安全性
|
|
|
|
|
- 哈希验证功能
|
|
|
|
|
- 16 位和 8 位 MD5 哈希(短版本)
|
|
|
|
|
- HMAC-MD5 实现,增强安全性
|
|
|
|
|
|
|
|
|
|
## 使用示例
|
|
|
|
|
|
|
|
|
|
### 基本使用
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
// 计算字符串的MD5哈希
|
|
|
|
|
hash := md5.EncryptString("hello world")
|
|
|
|
|
fmt.Println(hash) // 5eb63bbbe01eeed093cb22bb8f5acdc3
|
|
|
|
|
|
|
|
|
|
// 计算字节切片的MD5哈希
|
|
|
|
|
bytes := []byte("hello world")
|
|
|
|
|
hash = md5.EncryptBytes(bytes)
|
|
|
|
|
|
|
|
|
|
// 计算文件的MD5哈希
|
|
|
|
|
fileHash, err := md5.EncryptFile("path/to/file.txt")
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
fmt.Println(fileHash)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 链式 API
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
// 创建一个新的MD5实例并添加内容
|
|
|
|
|
hash := md5.New().
|
|
|
|
|
Add("hello").
|
|
|
|
|
Add(" ").
|
|
|
|
|
Add("world").
|
|
|
|
|
Sum()
|
|
|
|
|
fmt.Println(hash) // 5eb63bbbe01eeed093cb22bb8f5acdc3
|
|
|
|
|
|
|
|
|
|
// 或者从字符串初始化
|
|
|
|
|
hash = md5.FromString("hello").
|
|
|
|
|
Add(" world").
|
|
|
|
|
Sum()
|
|
|
|
|
|
|
|
|
|
// 从字节切片初始化
|
|
|
|
|
hash = md5.FromBytes([]byte("hello")).
|
|
|
|
|
AddBytes([]byte(" world")).
|
|
|
|
|
Sum()
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 安全性增强
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
// 使用盐值加密(提高安全性)
|
2025-06-09 12:34:52 +08:00
|
|
|
|
hashedPassword := md5.EncryptStringWithSalt("password123", "main@example.com")
|
2025-04-08 12:49:19 +08:00
|
|
|
|
|
|
|
|
|
// 使用前缀加密
|
|
|
|
|
hashedValue := md5.EncryptStringWithPrefix("secret-data", "prefix-")
|
|
|
|
|
|
|
|
|
|
// 验证带盐值的哈希
|
2025-06-09 12:34:52 +08:00
|
|
|
|
isValid := md5.VerifyMD5WithSalt("password123", "main@example.com", hashedPassword)
|
2025-04-08 12:49:19 +08:00
|
|
|
|
|
|
|
|
|
// 使用HMAC-MD5提高安全性
|
|
|
|
|
hmacHash := md5.MD5HMAC("message", "secret-key")
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 短哈希值
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
// 获取16位MD5(32位MD5的中间部分)
|
|
|
|
|
hash16 := md5.Get16("hello world")
|
|
|
|
|
fmt.Println(hash16) // 中间16个字符
|
|
|
|
|
|
|
|
|
|
// 获取8位MD5
|
|
|
|
|
hash8 := md5.Get8("hello world")
|
|
|
|
|
fmt.Println(hash8) // 中间8个字符
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 文件验证
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
// 验证文件MD5是否匹配
|
|
|
|
|
match, err := md5.VerifyFileMD5("path/to/file.txt", "expected-hash")
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
if match {
|
|
|
|
|
fmt.Println("文件MD5校验通过")
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Println("文件MD5校验失败")
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
|
|
|
|
1. MD5 主要用于校验,不适合用于安全存储密码等敏感信息
|
|
|
|
|
2. 如果用于密码存储,请务必使用加盐处理并考虑使用更安全的算法
|
|
|
|
|
3. 处理大文件时请使用`EncryptFileChunk`以优化性能
|
|
|
|
|
4. 返回的 MD5 哈希值都是 32 位的小写十六进制字符串(除非使用 Get16/Get8 函数)
|