php中“$params”上的“内爆”通常意味着什么


What does `implode` on `$params` in php usually mean?

我正在尝试使用一个文档最少的api。我得到的唯一提示是php的"伪代码"示例。我不懂php,似乎也不明白它们在这里的意思。

$codice_sha1 = sha1(implode(‘,’, $params) . ‘,’ . $secret);
$codice = base64_encode($key . ‘:’ . $codice_sha1);

impode看起来像JavaScript的join,但参数通常是键值对。所以我真的不明白这是怎么回事。任何熟悉习语的php忍者都知道这意味着什么吗?

以下是完整的api文档https://www.docebo.com/lms-docebo-api-third-party-integration/#onlinedoc

问题不在于"什么是内爆",而在于"在这种情况下通常意味着什么"

基本上我是如何看待这一点的,如下所示。在web上,有两种方法可以将参数发送到另一个站点:GET和POST。无论哪种方式,参数都将是字符串,而不是数组或任何数据类型。HTTP就是这样工作的。

好的。所以我正在写一个api。我想把sha1中的参数进行散列。我该怎么做?我可以告诉我的客户像这样发送:

$requestUrl = "example.com/api?key1=" . sha1($value1) . "&key2=" . sha1($value2); 

$params = array("key1" => "value1", "key2" => "value2");
$requestUrl = "example.com/api?params=" .  base64_encode(sha1(implode(',', $params)));

如果有一长串参数,第二个更有意义。

此外,如果你不想让多管闲事的人尝试单独解密每个参数,我认为这比一起解密要容易得多,你可以选择这种方法。

Base64编码不必担心像&这样的字符,因为它们可能会破坏GET请求的查询字符串。

基本上,它是由API创建者指定的。这不是使用API的开发人员的选择。

编辑:当我忘记sha1()只是一个哈希算法而不是可逆加密时,我最初的想法更有意义了。也许有一种方法他们仍然可以做到这一点,但这是一个复杂而糟糕的想法。

在您给出的代码示例中,implode(',', $params) . ',' . $secret的目的是将所有单独的信息位连接到一个字符串中。

要把它分解成单独的代码行,你可以相对清楚地看到发生了什么

// some example values to be encoded
$secret = 'xxxyyy';
$key = 'some key';
$params = array('a', 'b', 'b');
// concatenate the values into a single string ready for encoding
$imploded = implode(',', $params); // becomes string 'a,b,c'
$concatenated_str = 'a,b,c' . ',' . $secret; // becomes 'a,b,c,xxxyyy'
// encode the string
$codice_sha1 = sha1($concatenated_str); // creates a SHA1 hash of the string
$codice = base64_encode("{$key}:{$codice_sha1}"); // creates base64 encoding of the SHA1 hash

代码的目的是编码一个字符串(可能是用于稍后身份验证的密码哈希)

php中的

Implode只需将一个数组连接起来,并通过指定的分隔符分隔所有数组元素,将其转换为字符串。

因此implode('|', [1,2,3,4,5]);会产生字符串"1|2|3|4|5"

它通常不用于哈希,因为键丢失,并且在多维数组上根本不起作用。我不明白你是怎么得出$params不是一个正常的一维数组的结论的。