Java
public static String getSignature( String key, String secret, String timestamp){
String[] arr = new String[] { key, secret, timestamp };
Arrays.sort(arr);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
}
MessageDigest md;
String signature = null;
try {
md = MessageDigest.getInstance("SHA-1");
byte[] digest = md.digest(sb.toString().getBytes());
signature = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return signature;
}
/**
*
* @param byteArray
* @return
*/
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
/**
*
* @param mByte
* @return
*/
private static String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}
C++
FString UPXYAPIManager::GetTimestamp()
{
int64 sec_since_epoch = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
return std::to_string(sec_since_epoch).c_str();
}
FString UPXYAPIManager::GetSignature(const FString& Key, const FString& Secret, const FString Timestamp)
{
TArray<FString> Strings{Key, Secret, Timestamp};
Strings.Sort();
FString OriginString{};
for (const FString& Item : Strings)
{
OriginString.Append(Item);
}
std::string stdstring(TCHAR_TO_UTF8(*OriginString));
FSHA1 HashState;
HashState.Update((uint8*)stdstring.c_str(), stdstring.size());
HashState.Final();
uint8 Hash[FSHA1::DigestSize];
HashState.GetHash(Hash);
FString Signature {BytesToHex(Hash, FSHA1::DigestSize)};
return Signature;
}
PHP
//Sort the key, secret, and timestamp parameters in alphabetical order
sort($arr, SORT_NATURAL);
$string = implode('', $arr);
$signature = sha1($string);
Shell
function larkxr.getSignature() {
__sort() {
arr=(`echo -e "${adminKeys[adminKey]}\n${adminKeys[adminSecret]}\n${adminKeys[timestamp]}" |sort`)
}
declare -A adminKeys=(
[adminKey]=603284317954637824
[adminSecret]=c8333614aca34ebcb6fbaccc31196d37
[timestamp]=$(( `date +%s%N` / 1000000 ))
[signature]=`__sort;echo -ne "${arr[0]}${arr[1]}${arr[2]}" | sha1sum | awk '{print $1}'`
)
}
larkxr.getSignature