需要的自行拿走有问题留言,感谢(可乐🥤)大佬帮忙~

PHP:

function hashMiaoSpeed($token, $request) {
  $buildTokens = array_merge([$token], explode("|", trim(BUILDTOKEN)));

  $hasher = hash_init("sha512");
  hash_update($hasher, $request);

  foreach ($buildTokens as $t) {
    if ($t == "") {
      $t = "SOME_TOKEN";
    }

    $copy = hash_copy($hasher);
    hash_update($copy, $t);
    hash_update($copy, hash_final($hasher, true));
    $hasher = $copy;
  }

  $hash = hash_final($hasher, true);
  $hashUrlSafe = strtr(base64_encode($hash), '+/', '-_');

  return $hashUrlSafe;
}

Python:

import hashlib
import base64

def hash_miao_speed(token, request):
    build_tokens = [token] + BUILDTOKEN.strip().split("|")

    hasher = hashlib.sha512()
    hasher.update(request.encode())

    for t in build_tokens:
        if t == "":
            # unsafe, please make sure not to let token segment be empty
            t = "SOME_TOKEN"

        copy = hasher.copy()
        copy.update(t.encode())
        copy.update(hasher.digest())
        hasher = copy

    hash_bytes = hasher.digest()
    hash_url_safe = base64.urlsafe_b64encode(hash_bytes).decode().replace("+", "-").replace("/", "_")

    return hash_url_safe

# 示例用法
token = "123"
request = "456"
result = hash_miao_speed(token, request)
print(result)

Rust:

Cargo.toml

[dependencies]
sha2 = "0.10.6"
base64 = "0.13.0"

Code:

use sha2::{Digest, Sha512};
use base64::URL_SAFE;

fn hash_miao_speed(token: &str, request: &str) -> String {
    let mut build_tokens = vec![token.to_owned()];
    build_tokens.extend(BUILDTOKEN.split("|").map(|s| s.to_owned()));

    let mut hasher = Sha512::new();
    hasher.update(request);

    for t in build_tokens {
        let mut copy = hasher.clone();
        copy.update(t.as_bytes());
        copy.update(hasher.finalize().as_slice());
        hasher = copy;
    }

    let hash_bytes = hasher.finalize();
    let hash_url_safe = base64::encode_config(hash_bytes, URL_SAFE);

    hash_url_safe
}

// 示例用法
fn main() {
    let token = "123";
    let request = "456";
    let result = hash_miao_speed(token, request);
    println!("{}", result);
}

Java

注:java版本要11以上,不然可能会有语法错误

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String token = "123";
        String request = "456";
        String result = hashMiaoSpeed(token, request);
        System.out.println(result);
    }

    public static String hashMiaoSpeed(String token, String request) {
        List<String> buildTokens = new ArrayList<>();
        buildTokens.add(token);
        buildTokens.addAll( getPriToken() );
        MessageDigest hasher;
        try {
            hasher = MessageDigest.getInstance("SHA-512");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return "";
        }

        hasher.update(request.getBytes(StandardCharsets.UTF_8));

        for (String t : buildTokens) {
            if (t.isEmpty()) {
                t = "SOME_TOKEN";
            }

            MessageDigest copy = cloneMessageDigest(hasher);
            copy.update(t.getBytes(StandardCharsets.UTF_8));
            copy.update(hasher.digest());
            hasher = copy;
        }

        byte[] hashBytes = hasher.digest();
        String hashUrlSafe = Base64.getUrlEncoder().encodeToString(hashBytes)
                .replace("+", "-")
                .replace("/", "_");

        return hashUrlSafe;
    }

    private static List<String> getPriToken(){
          return List.of( StringUtils.split("aa|bb|cc|dd|ee", "|") );
    }
    private static MessageDigest cloneMessageDigest(MessageDigest messageDigest) {
        try {
            return (MessageDigest) messageDigest.clone();
        } catch (CloneNotSupportedException e) {
            throw new RuntimeException(e);
        }
    }
}
最后修改:2023 年 06 月 01 日
如果觉得我的文章对你有用,请随意赞赏