如何将时间转换为编码/加密字符串,如 PHP 中的 G7C

问题描述

我有一个非常不同的问题, 我们要转换 PHP strtotime("Now");到一个编码或加密的形式,看起来像 "G7C5w3hJ9nR+uI0i/Awi1Auz/nw+Eu" 与此相同,没有不同。 我有代码来解码这个编码或加密的字符串。 这是代码

$lol = "G7C5w3hJ9nR+uI0i/Awi1Auz/nw+Eu";
$lol = trim($lol);
   
$default = "ABCDEFGHIJKLMnopQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
$custom = "BSeI0grQ9Cmt/1oduh8AsF23wvZjpfGENx+n5JPMRYLDWqlVXy7zTHicO4UkKba6";
        
$lolec = base64_decode(strtr($lol,$custom,$default));
        
$lol = json_decode($lolec,true);
$date=@date_create($lol["date"]);
print_r( $date );

它会给你这个输出:-

DateTime Object ( [date] => 2021-03-25 06:38:46.000000 [timezone_type] => 1 [timezone] => +00:00 )

在这里你可以看到我们已经解码了那个字符串,我们得到了日期 2021-03-25 06:38:46.00000

但问题是这个字符串 "G7C5w3hJ9nR+uI0i/Awi1Auz/nw+Eu" 是如何编码或加密的?我们如何制作这样的字符串? 我还有一些这样的字符串,都是相似的,只是更改了一些中间字符,这里是:

G7C5w3hJ9nR+uI0i/AuToIpi/Aw+Eu
it will give you date 2021-02-28 04:46:56.000000

你可以看到这两个字符串没有任何变化,只是中间的字符发生了变化。我们想在 PHP 或 golang 中制作这样的相同字符串。有人可以帮忙吗?

解决方法

你可以使用完全相反的过程:

$default = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
$custom  = "BSeI0grQ9Cmt/1oduh8AsF23wvZjpfGENx+n5JPMRYLDWqlVXy7zTHicO4UkKba6";

$json = '{"date":"@1616654326"}';
$json64 = base64_encode($json);
$encoded = strtr($json64,$default,$custom);
$encoded = rtrim($encoded,'=');

var_dump($encoded); // string(30) "G7C5w3hJ9nR+uI0i/Awi1Auz/nw+Eu"

对于给定的时间戳:

$timestamp = '1614487616';
$array = ['date' => '@' . $timestamp];

$json = json_encode($array);
$json64 = base64_encode($json);
$encoded = strtr($json64,'=');
var_dump($encoded); // string(30) "G7C5w3hJ9nR+uI0i/AuToIpi/Aw+Eu"