有人会把下面的 java 获取签名字符串 代码用 php 在重写一下吗?

public class SignatureUtil{

  /**

* 获取签名字符串

*

* @param uuid 客户唯一标识

* @param appKey 应用key

* @param appSecret 应用密钥

* @param timeMillis 时间戳

* @param movedCard 移动取模基数

* @return

* @throws Exception

*/

public static String getEncryptStr(String uuid, String appKey, String appSecret, String timeMillis, int movedCard) throws Exception {

String encryptStr = uuid + appKey + appSecret + timeMillis;

byte[] encryptByte = encryptStr.getBytes("iso-8859-1");

byte[] changeByte = change(encryptStr, movedCard);

byte[] mergeByte = mergeByte(encryptByte, changeByte);

return DigestUtils.md5Hex(mergeByte);

}

/**

* 简单移位

*/

private static byte[] change(String encryptStr, int moveCard) throws UnsupportedEncodingException {

byte[] encryptByte = encryptStr.getBytes("iso-8859-1");

int encryptLength = encryptByte.length;

byte temp;

for (int i = 0; i < encryptLength; i++) {

temp = ((i % moveCard) > ((encryptLength - i) % moveCard)) ? encryptByte[i] : encryptByte[encryptLength - (i + 1)];

encryptByte[i] = encryptByte[encryptLength - (i + 1)];

encryptByte[encryptLength - (i + 1)] = temp;

}

return encryptByte;

}

/**

* 合并

*

* @param encryptByte

* @param changeByte

* @return

*/

private static byte[] mergeByte(byte[] encryptByte, byte[] changeByte) {

int encryptLength = encryptByte.length;

int encryptLength2 = encryptLength * 2;

byte[] temp = new byte[encryptLength2];

for (int i = 0; i < encryptByte.length; i++) {

temp[i] = encryptByte[i];

temp[encryptLength2 - 1 - i] = changeByte[i];

}

return temp;

}

}


回答:

大概逻辑如下:

public function getEncryptStr(string $uuid , string $app_key, string $app_secret, string $time_millis, int $move_card)

{

$encrypt_str = $uuid . $app_key . $app_secret . $time_millis;

$encrypt_byte = utf8_decode($encrypt_str); //把 UTF-8 字符串解码为 ISO-8859-1。

$change_str = $this->change($encrypt_str, $move_card);

$merge_str = $this->merge_byte($encrypt_byte, $change_str);

return md5($merge_str);

}

public function change(string $encrypt_str, int $move_card)

{

$encrypt_str = utf8_decode($encrypt_str);

$len = strlen($encrypt_str);

for ($i = 0; $i < $len; $i++){

$temp = ( ($i % $move_card) > (($len - $i) % $move_card) ) ? $encrypt_str[$i] : $encrypt_str[$len - ($i + 1)];

$encrypt_str[$i] = $encrypt_str[$len - ( $i + 1)];

$encrypt_str[$len - ($i+1)] = $temp;

}

return $encrypt_str;

}

public function merge_byte($encrypt_byte, $change_str)

{

$len = strlen($encrypt_byte);

$len2 = $len * 2;

$temp = '';

for ($i = 0; $i < $len; $i++){

$temp[$i] = $encrypt_byte[$i];

$temp[$len2 - 1 -$i] = $change_str[$i];

}

return $temp;

}

以上是 有人会把下面的 java 获取签名字符串 代码用 php 在重写一下吗? 的全部内容, 来源链接: utcz.com/p/944653.html

回到顶部