diff --git a/internal/service/cloud115/sha1.go b/internal/service/cloud115/sha1.go index 645d4f1..301b52c 100644 --- a/internal/service/cloud115/sha1.go +++ b/internal/service/cloud115/sha1.go @@ -5,9 +5,10 @@ import ( "encoding/hex" "io" "os" + "strings" ) -// FileSHA1 计算文件完整 SHA1(小写 hex)。 +// FileSHA1 计算文件完整 SHA1(大写 hex,115 全链路统一大写)。 func FileSHA1(path string) (string, error) { f, err := os.Open(path) if err != nil { @@ -18,11 +19,12 @@ func FileSHA1(path string) (string, error) { if _, err := io.Copy(h, f); err != nil { return "", err } - return hex.EncodeToString(h.Sum(nil)), nil + return strings.ToUpper(hex.EncodeToString(h.Sum(nil))), nil } -// FileSHA1Partial 计算文件 [start,end](含)字节区间的 SHA1(小写 hex)。 -// 用于 115 上传二次签名按 sign_check 指定的区间重算哈希。 +// FileSHA1Partial 计算文件 [start,end](含)字节区间的 SHA1(大写 hex)。 +// 用于 115 上传二次签名按 sign_check 指定的区间重算哈希;sign_val 必须为大写, +// 否则 115 以 status=8「签名认证失败」拒绝。 func FileSHA1Partial(path string, start, end int64) (string, error) { if start < 0 { start = 0 @@ -45,5 +47,5 @@ func FileSHA1Partial(path string, start, end int64) (string, error) { if _, err := io.CopyN(h, f, length); err != nil && err != io.EOF { return "", err } - return hex.EncodeToString(h.Sum(nil)), nil + return strings.ToUpper(hex.EncodeToString(h.Sum(nil))), nil } diff --git a/internal/service/cloud115/upload_test.go b/internal/service/cloud115/upload_test.go index 6a7e16c..f35361b 100644 --- a/internal/service/cloud115/upload_test.go +++ b/internal/service/cloud115/upload_test.go @@ -21,8 +21,8 @@ func TestFileSHA1(t *testing.T) { if err != nil { t.Fatal(err) } - // sha1("hello") = aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d - if sum != "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d" { + // sha1("hello") = aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d,115 要求大写 + if sum != "AAF4C61DDCC5E8A2DABEDE0F3B482CD9AEA9434D" { t.Errorf("unexpected sha1: %s", sum) } } @@ -39,7 +39,7 @@ func TestFileSHA1Partial(t *testing.T) { if err != nil { t.Fatal(err) } - if sum != "0ec09ef9836da03f1add21e3ef607627e687e790" { + if sum != "0EC09EF9836DA03F1ADD21E3EF607627E687E790" { t.Errorf("unexpected partial sha1: %s", sum) } } @@ -59,7 +59,7 @@ func TestFileSHA1PartialSmallerThanWindow(t *testing.T) { t.Fatalf("compute partial sha1 for small file should not fail: %v", err) } // 应等于整个文件(6 字节)的 sha1 - if sum != "1f8ac10f23c5b5bc1167bda84b833e5c057a77d2" { + if sum != "1F8AC10F23C5B5BC1167BDA84B833E5C057A77D2" { t.Errorf("unexpected partial sha1: %s", sum) } }