如何创建强大的api密钥

Ahm*_*mad 7 php api api-key

我想创建一个安全的REST API

例如,如果我看到谷歌API,则基于域生成API KEY.

从这里我有两个问题:

首先,使用单向散列是真/右吗?如果是,如果有人知道散列方法和域,那么他可以生成api密钥并使用它.以及我可以使用的哈希方法/功能?

第二个是,如果客户端如何制作桌面应用程序,他如何生成从桌面访问的API KEY,现在是一个拥有域URL的网站.我的意思是,他们可以生成api密钥,因为没有网址.

有什么好方法吗?,如何创建安全的api以及如何创建api密钥?

顺便说一句,我正在使用PHP

Pro*_*f83 1

好的,如果您有一个存储 API 密钥和使用它们的客户端的数据库表,您将为所有客户端构建唯一的密钥。您可以轻松地随机化字符,也可以选择对它们进行散列并将其存储为密钥。

例如。

$length = 16; // 16 Chars long
$key = "";
for ($i=1;$i<=$length;$i++) {
  // Alphabetical range
  $alph_from = 65;
  $alph_to = 90;

  // Numeric
  $num_from = 48;
  $num_to = 57;

  // Add a random num/alpha character
  $chr = rand(0,1)?(chr(rand($alph_from,$alph_to))):(chr(rand($num_from,$num_to)));
  if (rand(0,1)) $chr = strtolower($chr);
  $key.=$chr;
  }
Run Code Online (Sandbox Code Playgroud)

如果你想对此进行散列,可以使用 MD5 或 SHA1,但你需要在数据库中进行反向比较,例如。

SELECT * FROM api_keys where MD5(key) = INPUT
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助