private String getObjectKey(long key) {
        if (isMacEnabled) {
            byte[] keyBytes = LongUtil.toBytes(key);
            byte[] md5 = MacUtil.signMd5(keyBytes, macKey);
            byte[] base62Key = base62.encode(keyBytes);
            byte[] base62Md5 = base62.encode(md5);
            return StringUtil.newLatin1String(ArrayUtil.concat(base62Key, base62Md5));
        }
        if (isBase62Enabled) {
            byte[] base62Key = base62.encode(key);
            return StringUtil.newLatin1String(base62Key);
        }
        return Long.toString(key);
    }
@implNote 1. We use HMAC(key, message) instead of a HASH(key + message) to avoid the length
          extension attack. To put simply, if a hacker knows the signature of the resource
          "1", and he can also know the signature of resource "12", "13", "123", and so on
          without knowledge of the key.
          <p>
          2. Use MD5 because its output size (128 bits) is small, and it is a 22-character
          Base62-encoded string.
turms-plugins/turms-plugin-minio/src/main/java/im/turms/plugin/minio/MinioStorageServiceProvider.java