Php 生成盐、硅树脂、炭素?

Php 生成盐、硅树脂、炭素?,php,salt,silex,Php,Salt,Silex,我一直在研究制盐的最佳方法。一般的建议似乎是使用mcrype_create_iv或openssl_random_pseudo_字节来生成。T 他的问题是,由于涉及的字符,我在使用检索到的值时遇到了问题。我使用RedBean作为ORM,使用Silex作为框架。我很难用RedBean设置和检索生成的值,我知道Silex也有局限性,因为我曾经收到一个错误,salt不能包含brakets“{}” 生成使用标准字符集的salt的最佳方法是什么。我想我可能能够对结果进行md5,但这样会产生更小的字符集。要生

我一直在研究制盐的最佳方法。一般的建议似乎是使用mcrype_create_iv或openssl_random_pseudo_字节来生成。T

他的问题是,由于涉及的字符,我在使用检索到的值时遇到了问题。我使用RedBean作为ORM,使用Silex作为框架。我很难用RedBean设置和检索生成的值,我知道Silex也有局限性,因为我曾经收到一个错误,salt不能包含brakets“{}”


生成使用标准字符集的salt的最佳方法是什么。我想我可能能够对结果进行md5,但这样会产生更小的字符集。

要生成有效的salt,必须知道哪个算法将使用此salt。通常,您可以使用函数
base64\u encode()
从二进制salt中检索标准字符,它将生成具有以下字母的字符串:

base64编码字母表:+/0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvxyz

如果Silex将salt用于BCrypt哈希算法,它将使用带有以下字母的salt,请注意“.”而不是“+”:

BCrypt散列字母表:./0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvxyz

我认为最好是测试哪些字符是允许的,或者找出将使用哪种算法,否则迟早会生成一个无效的salt。使用函数
mcrypt\u create\u iv()
生成BCrypt盐的示例如下所示:

/**
 * Generates a random salt for using with the BCrypt algorithm.
 * @param int $length Number of characters the string should have.
 * @return string A random salt.
 */
function sto_generateRandomSalt($length = 22)
{
  if (!defined('MCRYPT_DEV_URANDOM')) die('The MCRYPT_DEV_URANDOM source is required (PHP 5.3).');

  // Generate random bytes, using the operating system's random source.
  // Since PHP 5.3 this also uses the random source on a Windows server.
  // Unlike /dev/random, the /dev/urandom does not block the server, if
  // there is not enough entropy available.
  $randomBinaryString = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);

  // BCrypt expects nearly the same alphabet as base64_encode returns,
  // but instead of the '+' characters it accepts '.' characters.
  // BCrypt alphabet: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
  $randomEncodedString = str_replace('+', '.', base64_encode($randomBinaryString));
  return substr($randomEncodedString, 0, $length);
}

你知道被接受字符的字母吗?你能在你的问题中提供它吗?我找不到任何关于这个的文档。我选择了所有标准的小写/大写字母和数字。