改写成GO代码:php function authcode$mystr $operation = DECODE $key = $expiry = 0 $ckey_length = 4; $key = md5$key; $keya = md5substr$key 0 16; $keyb = md5substr$key 16 16; $keyc = $ckey_le
func authcode(mystr string, operation string, key string, expiry int64) string { ckey_length := 4 key = fmt.Sprintf("%x", md5.Sum([]byte(key))) keya := fmt.Sprintf("%x", md5.Sum([]byte(key[0:16]))) keyb := fmt.Sprintf("%x", md5.Sum([]byte(key[16:32]))) var keyc string if ckey_length != 0 { if operation == "DECODE" { keyc = mystr[0:ckey_length] } else { keyc = fmt.Sprintf("%x", md5.Sum([]byte(time.Now().String())))[32-ckey_length:] } } cryptkey := keya + fmt.Sprintf("%x", md5.Sum([]byte(keya+keyc))) key_length := len(cryptkey) var mystr_bytes []byte if operation == "DECODE" { mystr_bytes, _ = base64.StdEncoding.DecodeString(mystr[ckey_length:]) } else { expiry_time := strconv.FormatInt(expiry+time.Now().Unix(), 10) md5_string := fmt.Sprintf("%x", md5.Sum([]byte(mystr+keyb)))[0:16] mystr_bytes = []byte(expiry_time + md5_string + mystr) } mystr_length := len(mystr_bytes) result := make([]byte, mystr_length) box := make([]int, 256) rndkey := make([]int, 256) for i := 0; i <= 255; i++ { rndkey[i] = int(cryptkey[i%key_length]) box[i] = i } for j, i := 0, 0; i < 256; i++ { j = (j + box[i] + rndkey[i]) % 256 box[i], box[j] = box[j], box[i] } for a, j, i := 0, 0, 0; i < mystr_length; i++ { a = (a + 1) % 256 j = (j + box[a]) % 256 box[a], box[j] = box[j], box[a] result[i] = mystr_bytes[i] ^ byte(box[(box[a]+box[j])%256]) } if operation == "DECODE" { if (string(result[0:10]) == "0" || (strings.TrimSpace(string(result[0:10])) != "" && strconv.ParseInt(string(result[0:10]), 10, 64)-time.Now().Unix() > 0)) && string(result[10:26]) == fmt.Sprintf("%x", md5.Sum([]byte(string(result[26:])+keyb)))[0:16] { return string(result[26:]) } else { return "" } } else { return keyc + strings.ReplaceAll(base64.StdEncoding.EncodeToString(result), "=", "") } }
func randomkeys(length int) string { pattern := "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" key := "" for i := 0; i < length; i++ { key += string(pattern[rand.Intn(len(pattern))]) } return key }
原文地址: https://www.cveoy.top/t/topic/bKYw 著作权归作者所有。请勿转载和采集!