有没有人知道PHP的任何API密钥生成器脚本/类?该类应该有方法generate,它将生成一个键和isValid()方法,以检查该键是否有效。
答案 0 :(得分:62)
有多种方法可以生成API密钥。我根据应用程序使用了以下3种方法,
Base62(随机)。生成一个大的安全随机数,Base-62对其进行编码。关键看起来像“w5vt2bjzf8ryp63t”。这对自配置系统很有用。您不必担心碰撞和不适当的密钥。您必须检查数据库以确定密钥是否有效。
Base62(MD5-HMAC(key,Normalize(referer)))。如果仅允许来自一个站点的API,则此方法很有用。只需检查规范化引用的HMAC,您就知道密钥是否有效,无数据库访问。你需要保持HMAC密钥的秘密才能做到这一点。
人类指定的友好名称,例如“example.com”。如果要求API用户拥有域或他们是您的公司合作伙伴,这种方法很有用。
请注意,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())
-> 并将结果存储在一个数据库中以备将来检查