tydata-server/pkg/lzkit/md5/md5_test.go
2025-04-08 12:49:19 +08:00

193 lines
4.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package md5
import (
"fmt"
"os"
"testing"
)
func TestEncryptString(t *testing.T) {
tests := []struct {
input string
expected string
}{
{"", "d41d8cd98f00b204e9800998ecf8427e"},
{"hello", "5d41402abc4b2a76b9719d911017c592"},
{"123456", "e10adc3949ba59abbe56e057f20f883e"},
{"Hello World!", "ed076287532e86365e841e92bfc50d8c"},
}
for _, test := range tests {
result := EncryptString(test.input)
fmt.Println(result)
if result != test.expected {
t.Errorf("EncryptString(%s) = %s; want %s", test.input, result, test.expected)
}
}
}
func TestEncryptBytes(t *testing.T) {
tests := []struct {
input []byte
expected string
}{
{[]byte(""), "d41d8cd98f00b204e9800998ecf8427e"},
{[]byte("hello"), "5d41402abc4b2a76b9719d911017c592"},
{[]byte{0, 1, 2, 3, 4}, "5267768822ee624d48fce15ec5ca79b6"},
}
for _, test := range tests {
result := EncryptBytes(test.input)
if result != test.expected {
t.Errorf("EncryptBytes(%v) = %s; want %s", test.input, result, test.expected)
}
}
}
func TestMD5Chain(t *testing.T) {
// 测试链式调用
result := New().
Add("hello").
Add(" ").
Add("world").
Sum()
expected := "fc5e038d38a57032085441e7fe7010b0" // MD5("hello world")
if result != expected {
t.Errorf("Chain MD5 = %s; want %s", result, expected)
}
// 测试从字符串初始化
result = FromString("hello").Add(" world").Sum()
if result != expected {
t.Errorf("FromString MD5 = %s; want %s", result, expected)
}
// 测试从字节切片初始化
result = FromBytes([]byte("hello")).AddBytes([]byte(" world")).Sum()
if result != expected {
t.Errorf("FromBytes MD5 = %s; want %s", result, expected)
}
}
func TestVerifyMD5(t *testing.T) {
if !VerifyMD5("hello", "5d41402abc4b2a76b9719d911017c592") {
t.Error("VerifyMD5 failed for correct match")
}
if VerifyMD5("hello", "wrong-hash") {
t.Error("VerifyMD5 succeeded for incorrect match")
}
// 测试大小写不敏感
if !VerifyMD5("hello", "5D41402ABC4B2A76B9719D911017C592") {
t.Error("VerifyMD5 failed for uppercase hash")
}
}
func TestSaltAndPrefix(t *testing.T) {
// 测试加盐
saltResult := EncryptStringWithSalt("password", "salt123")
expectedSalt := EncryptString("passwordsalt123")
if saltResult != expectedSalt {
t.Errorf("EncryptStringWithSalt = %s; want %s", saltResult, expectedSalt)
}
// 测试前缀
prefixResult := EncryptStringWithPrefix("password", "prefix123")
expectedPrefix := EncryptString("prefix123password")
if prefixResult != expectedPrefix {
t.Errorf("EncryptStringWithPrefix = %s; want %s", prefixResult, expectedPrefix)
}
// 验证带盐值的MD5
if !VerifyMD5WithSalt("password", "salt123", saltResult) {
t.Error("VerifyMD5WithSalt failed for correct match")
}
}
func TestGet16And8(t *testing.T) {
full := EncryptString("test-string")
// 测试16位MD5
result16 := Get16("test-string")
expected16 := full[8:24]
if result16 != expected16 {
t.Errorf("Get16 = %s; want %s", result16, expected16)
}
// 测试8位MD5
result8 := Get8("test-string")
expected8 := full[12:20]
if result8 != expected8 {
t.Errorf("Get8 = %s; want %s", result8, expected8)
}
}
func TestMD5HMAC(t *testing.T) {
// 已知的HMAC-MD5结果
tests := []struct {
message string
key string
expected string
}{
{"message", "key", "4e4748e62b463521f6775fbf921234b5"},
{"test", "secret", "8b11d99898918564dda1a9fe205b5310"},
}
for _, test := range tests {
result := MD5HMAC(test.message, test.key)
if result != test.expected {
t.Errorf("MD5HMAC(%s, %s) = %s; want %s",
test.message, test.key, result, test.expected)
}
}
}
func TestEncryptFile(t *testing.T) {
// 创建临时测试文件
content := []byte("test file content for MD5")
tmpFile, err := os.CreateTemp("", "md5test-*.txt")
if err != nil {
t.Fatalf("无法创建临时文件: %v", err)
}
defer os.Remove(tmpFile.Name())
if _, err := tmpFile.Write(content); err != nil {
t.Fatalf("无法写入临时文件: %v", err)
}
if err := tmpFile.Close(); err != nil {
t.Fatalf("无法关闭临时文件: %v", err)
}
// 计算文件MD5
fileHash, err := EncryptFile(tmpFile.Name())
if err != nil {
t.Fatalf("计算文件MD5失败: %v", err)
}
// 验证文件MD5
expectedHash := EncryptBytes(content)
if fileHash != expectedHash {
t.Errorf("文件MD5 = %s; 应为 %s", fileHash, expectedHash)
}
// 测试VerifyFileMD5
match, err := VerifyFileMD5(tmpFile.Name(), expectedHash)
if err != nil {
t.Fatalf("验证文件MD5失败: %v", err)
}
if !match {
t.Error("VerifyFileMD5返回false应返回true")
}
// 测试不匹配的情况
match, err = VerifyFileMD5(tmpFile.Name(), "wronghash")
if err != nil {
t.Fatalf("验证文件MD5失败: %v", err)
}
if match {
t.Error("VerifyFileMD5对错误的哈希返回true应返回false")
}
}