我正在尝试使用一个文档最少的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
代码的目的是编码一个字符串(可能是用于稍后身份验证的密码哈希)
Implode只需将一个数组连接起来,并通过指定的分隔符分隔所有数组元素,将其转换为字符串。
因此implode('|', [1,2,3,4,5]);
会产生字符串"1|2|3|4|5"。
它通常不用于哈希,因为键丢失,并且在多维数组上根本不起作用。我不明白你是怎么得出$params
不是一个正常的一维数组的结论的。