Files
2026-02-17 13:06:23 +08:00

59 lines
1.7 KiB
Go

package android
import (
"crypto/md5"
"crypto/sha1"
"encoding/hex"
)
// CalcMsgCrc calc msg hash
func CalcMsgCrc(data []byte) int {
salt1 := [16]byte{0x5c, 0x50, 0x7b, 0x6b, 0x65, 0x4a, 0x13, 0x09, 0x45, 0x58, 0x7e, 0x11, 0x0c, 0x1f, 0x68, 0x79}
salt2 := [16]byte{0x36, 0x3a, 0x11, 0x01, 0x0f, 0x20, 0x79, 0x63, 0x2f, 0x32, 0x14, 0x7b, 0x66, 0x75, 0x02, 0x13}
pad1 := [0x30]byte{
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
}
pad2 := [0x30]byte{
0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
}
md5hash := md5.Sum(data)
hashstr := hex.EncodeToString(md5hash[:])
hash1Data := make([]byte, 16)
copy(hash1Data, salt1[:])
hash1Data = append(hash1Data, pad1[:]...)
hash1 := sha1.New()
hash1.Write(hash1Data)
hash1.Write([]byte(hashstr))
h1 := hash1.Sum(nil)
hash2Data := make([]byte, 16)
copy(hash2Data, salt2[:])
hash2Data = append(hash2Data, pad2[:]...)
hash2 := sha1.New()
hash2.Write(hash2Data)
hash2.Write(h1)
h2 := hash2.Sum(nil)
var b1, b2, b3 byte
size := len(h2)
for i := 0; i < size-2; i++ {
b1 = h2[i+0] - b1*0x7d
b2 = h2[i+1] - b2*0x7d
b3 = h2[i+2] - b3*0x7d
}
return (int(0x21) << 24) | ((int(b3) & 0x7f) << 16) | ((int(b2) & 0x7f) << 8) | (int(b1) & 0x7f)
}