Мне нужно сгенерировать открытый ключ и секретный ключ.
Будет ли достаточно следующего кода?
<?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 = '[email protected]';
echo 'pk_' . genToken($salt);
echo "\n";
echo 'sk_' . genToken($salt);
echo "\n";
Не используйте в качестве соли электронную почту пользователя, потому что ее можно угадать. Вместо того, чтобы делать это самостоятельно с риском ошибки, используйте библиотеку.
Я предлагаю вам использовать эту библиотеку PHP https://github.com/IcyApril/CryptoLib (как предложено в этом посте:Создание криптографически безопасных токенов). Эта библиотека позволяет вам генерировать случайную строку, а затем хэшировать ее с помощью соли, предоставляя очень практичные методы:
Этот пример (предоставленный документацией, которую вы можете найти здесь: https://cryptolib.ju.je/#intro) создайте соль для хэширования токена, который вы можете предоставить своему пользователю в качестве ключа:
<?php
// Require the library
require_once('path/to/cryptolib.php');
// Generate a token of 16 char with the library by calling the randomString method.
$token = CryptoLib::randomString(16);
// Generate a salt with the library by calling the generateSalt method
$salt = CryptoLib::generateSalt();
// Hash the token with the salt that was generated
$hash = CryptoLib::hash($token, $salt);
// Salt and hash are then stored in the database.
// $hash and $salt are gotten later from the database, and the token is provided via a POST variable by the user
$isHashCorrect = CryptoLib::validateHash($hash, $_POST['token']);
// If isHashCorrect is true, the user has provided the correct token.
?>
Я надеюсь, что это поможет вам.
Других решений пока нет …