214 lines
5.6 KiB
Go
214 lines
5.6 KiB
Go
|
|
package crypto
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"testing"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
func TestWestDexEncryptDecrypt(t *testing.T) {
|
|||
|
|
testCases := []struct {
|
|||
|
|
name string
|
|||
|
|
data string
|
|||
|
|
secretKey string
|
|||
|
|
}{
|
|||
|
|
{
|
|||
|
|
name: "简单文本",
|
|||
|
|
data: "hello world",
|
|||
|
|
secretKey: "mySecretKey123",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "中文文本",
|
|||
|
|
data: "你好世界",
|
|||
|
|
secretKey: "中文密钥",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "JSON数据",
|
|||
|
|
data: `{"name":"张三","age":30,"city":"北京"}`,
|
|||
|
|
secretKey: "jsonSecretKey",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "长文本",
|
|||
|
|
data: "这是一个很长的文本,用来测试加密解密功能是否正常工作。包含各种字符:123456789!@#$%^&*()_+-=[]{}|;':\",./<>?",
|
|||
|
|
secretKey: "longTextKey",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "空字符串",
|
|||
|
|
data: "",
|
|||
|
|
secretKey: "emptyDataKey",
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for _, tc := range testCases {
|
|||
|
|
t.Run(tc.name, func(t *testing.T) {
|
|||
|
|
// 加密
|
|||
|
|
encrypted, err := WestDexEncrypt(tc.data, tc.secretKey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fatalf("加密失败: %v", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
t.Logf("原始数据: %s", tc.data)
|
|||
|
|
t.Logf("密钥: %s", tc.secretKey)
|
|||
|
|
t.Logf("加密结果: %s", encrypted)
|
|||
|
|
|
|||
|
|
// 解密
|
|||
|
|
decrypted, err := WestDexDecrypt(encrypted, tc.secretKey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fatalf("解密失败: %v", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
decryptedStr := string(decrypted)
|
|||
|
|
t.Logf("解密结果: %s", decryptedStr)
|
|||
|
|
|
|||
|
|
// 验证解密结果是否与原始数据一致
|
|||
|
|
if decryptedStr != tc.data {
|
|||
|
|
t.Errorf("解密结果不匹配: 期望 %s, 实际 %s", tc.data, decryptedStr)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestWestDexDecryptOutput(t *testing.T) {
|
|||
|
|
// 专门用来查看解密结果的测试
|
|||
|
|
testData := []struct {
|
|||
|
|
name string
|
|||
|
|
data string
|
|||
|
|
secretKey string
|
|||
|
|
encryptedData string // 预设的加密数据
|
|||
|
|
}{
|
|||
|
|
{
|
|||
|
|
name: "测试数据1",
|
|||
|
|
data: "DLrbtEki5o/5yTvQWR+dWWUZYEo5s58D8LTnhhlAl99SwZbECa34KpStmR+Qr0gbbKzh3y4t5+/vbFFZgv03DtnYlLQcQt+rSgtxkCN/PCBPaFE0QZRTufd7djJfUww0Eh6DMHD7NS9pcuCa0PHGVoE+Vwo2YSwOnh2gtx3Bt0Qhs+w76tfCwIeufZ8tcpFs/nb84HIZxk+0cH1bTfNE6VsXI6vMpKvnS02O3oE2642ozeHgglCNuiOFMcCL8Erw4FKPnfRCUYdeKc2dZ7OF2IZqt0t4WiJBxjB/6k4tgAj/HepE2gaulWU8RVvAF+vPF5i3ekHHq8T7226rNlVfuagodaRXiOqO5E1h6Mx9ygcDL0HXvQKsxxJdl/bUP+t/+rOjA+k/IR/vF1UJGrGrkSJVfkcWXPP85cgws18gE9rIs2Ji1HGjvOmnez370L0+",
|
|||
|
|
secretKey: "121a1e41fc1690dd6b90afbcacd80cf4",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "中文数据",
|
|||
|
|
data: "用户数据",
|
|||
|
|
secretKey: "密钥123",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "API数据",
|
|||
|
|
data: "api_call_data",
|
|||
|
|
secretKey: "production_key",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "JSON格式",
|
|||
|
|
data: `{"user_id":12345,"name":"张三","status":"active"}`,
|
|||
|
|
secretKey: "json_key",
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for i, td := range testData {
|
|||
|
|
decrypted, err := WestDexDecrypt(td.data, td.secretKey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fatalf("解密失败: %v", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
t.Logf("测试 %d - %s:", i+1, td.name)
|
|||
|
|
t.Logf(" 原始数据: %s", td.data)
|
|||
|
|
t.Logf(" 使用密钥: %s", td.secretKey)
|
|||
|
|
t.Logf(" 解密结果: %s", string(decrypted))
|
|||
|
|
t.Logf(" 解密正确: %v", string(decrypted) == td.data)
|
|||
|
|
t.Log("---")
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestSpecificDecrypt(t *testing.T) {
|
|||
|
|
// 如果你有特定的加密数据想要解密,可以在这里测试
|
|||
|
|
specificTests := []struct {
|
|||
|
|
name string
|
|||
|
|
encryptedData string
|
|||
|
|
secretKey string
|
|||
|
|
expectedData string // 如果知道预期结果的话
|
|||
|
|
}{
|
|||
|
|
// 示例:如果你有具体的加密数据想要解密,可以添加到这里
|
|||
|
|
// {
|
|||
|
|
// name: "特定数据解密",
|
|||
|
|
// encryptedData: "你的加密数据",
|
|||
|
|
// secretKey: "你的密钥",
|
|||
|
|
// expectedData: "预期的解密结果",
|
|||
|
|
// },
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
t.Log("=== 特定数据解密测试 ===")
|
|||
|
|
for _, test := range specificTests {
|
|||
|
|
decrypted, err := WestDexDecrypt(test.encryptedData, test.secretKey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Logf("%s - 解密失败: %v", test.name, err)
|
|||
|
|
continue
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
result := string(decrypted)
|
|||
|
|
t.Logf("%s:", test.name)
|
|||
|
|
t.Logf(" 加密数据: %s", test.encryptedData)
|
|||
|
|
t.Logf(" 使用密钥: %s", test.secretKey)
|
|||
|
|
t.Logf(" 解密结果: %s", result)
|
|||
|
|
|
|||
|
|
if test.expectedData != "" {
|
|||
|
|
t.Logf(" 预期结果: %s", test.expectedData)
|
|||
|
|
t.Logf(" 解密正确: %v", result == test.expectedData)
|
|||
|
|
}
|
|||
|
|
t.Log("---")
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestWestDexDecryptWithWrongKey(t *testing.T) {
|
|||
|
|
// 测试用错误密钥解密
|
|||
|
|
data := "sensitive data"
|
|||
|
|
correctKey := "correct_key"
|
|||
|
|
wrongKey := "wrong_key"
|
|||
|
|
|
|||
|
|
// 用正确密钥加密
|
|||
|
|
encrypted, err := WestDexEncrypt(data, correctKey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fatalf("加密失败: %v", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 用错误密钥解密
|
|||
|
|
decrypted, err := WestDexDecrypt(encrypted, wrongKey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Logf("用错误密钥解密失败(这是预期的): %v", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
decryptedStr := string(decrypted)
|
|||
|
|
t.Logf("原始数据: %s", data)
|
|||
|
|
t.Logf("用错误密钥解密结果: %s", decryptedStr)
|
|||
|
|
|
|||
|
|
// 验证解密结果应该与原始数据不同
|
|||
|
|
if decryptedStr == data {
|
|||
|
|
t.Error("用错误密钥解密不应该得到正确结果")
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 基准测试
|
|||
|
|
func BenchmarkWestDexEncrypt(b *testing.B) {
|
|||
|
|
data := "这是一个用于基准测试的数据字符串"
|
|||
|
|
secretKey := "benchmarkKey"
|
|||
|
|
|
|||
|
|
b.ResetTimer()
|
|||
|
|
for i := 0; i < b.N; i++ {
|
|||
|
|
_, err := WestDexEncrypt(data, secretKey)
|
|||
|
|
if err != nil {
|
|||
|
|
b.Fatalf("加密失败: %v", err)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func BenchmarkWestDexDecrypt(b *testing.B) {
|
|||
|
|
data := "这是一个用于基准测试的数据字符串"
|
|||
|
|
secretKey := "benchmarkKey"
|
|||
|
|
|
|||
|
|
// 先加密一次获得密文
|
|||
|
|
encrypted, err := WestDexEncrypt(data, secretKey)
|
|||
|
|
if err != nil {
|
|||
|
|
b.Fatalf("预加密失败: %v", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
b.ResetTimer()
|
|||
|
|
for i := 0; i < b.N; i++ {
|
|||
|
|
_, err := WestDexDecrypt(encrypted, secretKey)
|
|||
|
|
if err != nil {
|
|||
|
|
b.Fatalf("解密失败: %v", err)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|