用于生成唯一标记的脚本

时间:2016-03-15 23:20:26

标签: php security token private-key public-key

我需要生成一个公钥和密钥。

以下代码是否足够?

<?php

function genToken($salt) {
    $secret = openssl_random_pseudo_bytes(16);

    $apiKey = hash_hmac('sha256', $salt, $secret);
    $apiKey = base64_encode($apiKey);
    $apiKey = str_replace('=', '', $apiKey);

    return $apiKey;
}

$salt = 'UsernameEmail@gmail.com';
echo 'pk_' . genToken($salt);
echo "\n";
echo 'sk_' . genToken($salt);
echo "\n";

1 个答案:

答案 0 :(得分:1)

不要使用用户电子邮件作为salt,因为它可以被猜到。而不是自己冒险而冒错误使用库。

我建议你使用这个PHP库https://github.com/IcyApril/CryptoLib(就像这篇帖子中提出的那样:Generating cryptographically secure tokens)。使用此库可以生成随机字符串,然后通过公开非常实用的方法使用salt对其进行哈希:

此示例(由您可以在此处找到的文档提供:https://cryptolib.ju.je/#intro)生成一个哈希哈希值,您可以将其作为密钥提供给用户:

// promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

var array = [
  function() {
    return delay(2000)
      .then(() => console.log(0));
  },

  function() {
    return delay(200)
      .then(() => console.log(1));
  },

  function() {
    console.log(2);
  },

  function() {
    return delay(70)
      .then(() => console.log(3));
  }
];

array.reduce((promise, fn) => promise.then(fn), Promise.resolve());

我希望它会对你有所帮助。