GetNude v1.0 API Reference
  • Image generation
  • Position generation
  • Balance
  • Webhook
  • Sign
Powered by GitBook
On this page

Sign

PreviousWebhook

Last updated 9 months ago

Refer to the demo on GitHub.


  1. Extract all keys and sort them

  2. Stitching key-value pair string

  3. Use Md5 encryption

const crypto = require('crypto');

function sign(data, secret) {
    // Extract all keys and sort them
    const keys = Object.keys(data).sort();

    // Stitching key-value pair string
    const keyValueStrings = keys
        .filter(key => key !== 'sign') // Exclude the sign key
        .map(key => `${key}=${data[key]}`);

    const result = keyValueStrings.join('&') + '&' + secret;

    // Use md5 encryption
    const hash = crypto.createHash('md5');
    hash.update(result);
    return hash.digest('hex');
}

// test
let tmp = Date.now()
const data = {
  "file_base64": "Your base64 string contains data:image/png;base64",
  "timestamp": "xxx",
  "merchant_no": xxx,
  "mode": "nude",
  "notify_url": "string"
};
const secret = 'Your secret';
console.log(tmp,sign(data, secret));
import hashlib
from time import time

def sign(data, secret):
    #  Extract all keys and sort them
    keys = sorted(data.keys())

    # Concatenate key-value pair strings
    keyValueStrings = [f"{key}={data[key]}" for key in keys if key != 'sign']

    result = '&'.join(keyValueStrings) + '&' + secret

    #  Encrypt using md5
    md5 = hashlib.md5()
    md5.update(result.encode('utf-8'))
    return md5.hexdigest()

# 测试
timestamp = int(time() * 1000)  
data = {
  "file_base64": "Your base64 string contains data:image/png;base64",
  "timestamp": timestamp,
  "merchant_no": xxx,
  "mode": "nude",
  "notify_url": "string"
}
secret = 'Your secret'
print(timestamp, sign(data, secret))
package main

import (
	"crypto/md5"
	"encoding/hex"
	"sort"
	"strings"
)

func sign(data map[string]string, secret string) string {
	keys := make([]string, 0, len(data))
	for key := range data {
		keys = append(keys, key)
	}
	sort.Strings(keys)
	var keyValueStrings []string
	for _, key := range keys {
		if key != "sign" {
			keyValueStrings = append(keyValueStrings, key+"="+data[key])
		}
	}

	result := strings.Join(keyValueStrings, "&") + "&" + secret
	hash := md5.New()
	hash.Write([]byte(result))
	return hex.EncodeToString(hash.Sum(nil))
}

func main() {
	timestamp := "timestamp" 
	data := map[string]string{
		 "file_base64": "Your base64 string contains data:image/png;base64",
  		 "timestamp": timestamp,
		 "merchant_no": xxx,
		 "mode": "nude",
		 "notify_url": "string"
	}
	secret := "your_sercret"
	println(timestamp, sign(data, secret))
}
<?php

function sign($data, $secret) {
    // Extract all keys and sort them
    $keys = array_keys($data);
    sort($keys);

    // Concatenate key-value pair strings
    $keyValueStrings = [];
    foreach ($keys as $key) {
        if ($key !== 'sign') {
            $keyValueStrings[] = $key . '=' . $data[$key];
        }
    }

    $result = implode('&', $keyValueStrings) . '&' . $secret;

    // Encrypt using md5
    return md5($result);
}

// 测试
$tmp = time() * 1000;
$data = [
  "file_base64": "Your base64 string contains data:image/png;base64",
  "timestamp": $tmp,
  "merchant_no": xxx,
  "mode": "nude",
  "notify_url": "string"
];
$secret = 'Your secret';
echo $tmp, ' ', sign($data, $secret);
?>
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        long tmp = System.currentTimeMillis();
        Map<String, String> data = new TreeMap<>();
        data.put("timestamp", String.valueOf(tmp));
        data.put("file_base64", "Your file_base64 str contains data:image/png;base64");
        data.put("merchant_no", "Your merchant_no");
        data.put("mode", "nude");
        data.put("notify_url", "Your notify_url");
        String secret = "Your secret";
        System.out.println(tmp + " " + sign(data, secret));
    }

    public static String sign(Map<String, String> data, String secret) {
        // Extract all keys and sort them
        String[] keys = data.keySet().toArray(new String[0]);
        Arrays.sort(keys);

        // Concatenate key-value pair strings
        StringBuilder result = new StringBuilder();
        for (String key : keys) {
            if (!key.equals("sign")) {
                result.append(key).append("=").append(data.get(key)).append("&");
            }
        }
        result.append(secret);

        // Encrypt using md5
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] bytes = md.digest(result.toString().getBytes());
            StringBuilder sb = new StringBuilder();
            for (byte b : bytes) {
                sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
}
GitHub - GetNude/Undress: One-click intelligent clothes change based on AIGitHub
Logo