PHP API密钥生成器

时间:2009-09-19 12:22:36

标签: php security key generator api-key

有没有人知道PHP的任何API密钥生成器脚本/类?该类应该有方法generate,它将生成一个键和isValid()方法,以检查该键是否有效。

11 个答案:

答案 0 :(得分:62)

有多种方法可以生成API密钥。我根据应用程序使用了以下3种方法,

  1. Base62(随机)。生成一个大的安全随机数,Base-62对其进行编码。关键看起来像“w5vt2bjzf8ryp63t”。这对自配置系统很有用。您不必担心碰撞和不适当的密钥。您必须检查数据库以确定密钥是否有效。

  2. Base62(MD5-HMAC(key,Normalize(referer)))。如果仅允许来自一个站点的API,则此方法很有用。只需检查规范化引用的HMAC,您就知道密钥是否有效,无数据库访问。你需要保持HMAC密钥的秘密才能做到这一点。

  3. 人类指定的友好名称,例如“example.com”。如果要求API用户拥有域或他们是您的公司合作伙伴,这种方法很有用。

  4. 请注意,API密钥没有安全性。它只是分配给API应用程序的名称。越来越多的人使用“App ID”或“Dev ID”这样的术语来反映它的真实含义。如果您想要保护协议,则必须分配另一个密钥,例如OAuth中的consumer_key/consumer_secret

答案 1 :(得分:8)

以下是我对这个问题的简单回答:

$key = implode('-', str_split(substr(strtolower(md5(microtime().rand(1000, 9999))), 0, 30), 6));

答案 2 :(得分:7)

只是使用这样的东西(伪代码)sha1(salt + time + mac-addr + another salt + some other random data) crc32或md5也可以工作而不是sha1并将其存储在数据库中然后isValid()检查数据库是否存在密钥?

答案 3 :(得分:2)

正如已经提到的那样,这完全取决于具体情况。我需要使用的一种方法是使用专门分配的API密钥验证referer url。因此,使用API​​密钥时,所有真正需要的是(伪)key = md5(referer url + name + salt),然后您可以使用它来进行校验和。 我知道它之前已经提到了类似的东西,但它就是这样。至于isValid()函数,你需要做的就是将它与校验和和URL进行比较。

编辑:刚刚意识到原始问题的年龄:S

答案 4 :(得分:2)

根据您的需要,您还可以使用3scale之类的东西来创建密钥并管理对API的访问。它生成密钥,但也跟踪速率限制,分析等,并允许API上的开发人员创建新密钥。

有一个PHP库作为连接器之一:https://support.3scale.net/reference/libraries

答案 5 :(得分:1)

这是一个老问题,但我昨天偶然发现了同样的问题,发现这个类符合RFC4122标准:

WDS.browser.findElement(org.openqa.selenium.By.id('file-input-id')).sendKeys('/full/path/to/file/to/upload')

希望有所帮助

答案 6 :(得分:0)

请参阅uniqid

string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )

答案 7 :(得分:0)

您可以使用md5(uniqid())并将其划分为部分或以其他更好的方式格式化。

答案 8 :(得分:0)

GUID可以正常工作,但不具有加密安全性。

服务器答案在microtime()或mt_rand上使用md5或sha1哈希方法。

散列uniqid,uuid或时间戳不一定会产生独特的结果! 实际上哈希增加了碰撞的可能性,因此我强烈建议不要这样做。

答案 9 :(得分:0)

如果您不需要 API 密钥来表示任何含义或可解码,只是为了匹配某些内容,那么这很有效:

$api = md5(rand(1, 99999));

答案 10 :(得分:0)

你可以做一些简单的事情,比如 md5(time()) -> 并将结果存储在一个数据库中以备将来检查