Php 使用crypt进行不同的加密。盐的格式应该是什么

Php 使用crypt进行不同的加密。盐的格式应该是什么,php,encryption,hash,salt,crypt,Php,Encryption,Hash,Salt,Crypt,我正在为开发构建我的类,并且正在开发一个加密类。我一直在阅读php的crypt函数和不同的加密类型,但有几个方面的解释含糊不清 我的理解是有这些加密选项CRYPT\u STD\u DES,CRYPT\u EXT\u DES,CRYPT\u MD5,CRYPT\u河豚,CRYPT\u SHA256,以及CRYPT\u SHA512。要查看它们是否已启用,只需检查 if(CRYPT_FOO==1) { //is enabled } 问题 不同加密的salt要求/格式是什么。 要求是这样的 为

我正在为开发构建我的类,并且正在开发一个加密类。我一直在阅读php的crypt函数和不同的加密类型,但有几个方面的解释含糊不清

我的理解是有这些加密选项
CRYPT\u STD\u DES
CRYPT\u EXT\u DES
CRYPT\u MD5
CRYPT\u河豚
CRYPT\u SHA256
,以及
CRYPT\u SHA512
。要查看它们是否已启用,只需检查

if(CRYPT_FOO==1)
{
   //is enabled
}
问题

不同加密的salt要求/格式是什么。 要求是这样的

为了澄清起见,我假设如果您将河豚盐与
crypt()
一起使用,它会自动执行河豚加密?

有很多关于各种模式的信息,以及应该作为其
salt
参数传递的信息:

  • CRYPT_STD_DES
    :字母表中的两个字符salt
    /0-9A-Za-z
    ,即12位salt
  • CRYPT\u EXT\u DES
    :一个
    字符,然后是一个4字符的迭代计数,然后是一个4字符的salt(每个字符使用相同的字母表)
  • CRYPT\u MD5
    :一个标记
    $1$
    ,然后再加上9个salt字符(我想使用与上面相同的字母表)
  • CRYPT\u河豚
    :一个标记
    $2a$
    ,然后是一个介于04到31之间的两位数成本参数(意味着24到231次迭代),然后是
    $
    和一个22位数的salt(同样,使用与上述相同的字母表)
  • CRYPT\u SHA256
    :一个标记
    $5$
    ,一个可选的轮参数指示
    轮数=
    数字
    $
    (十进制数字介于1000和99999999999之间),以及一个16字符的salt(使用与上述相同的字母表)
  • CRYPT\u SHA512
    :一个标记
    $6$
    ,一个可选的轮参数指示
    轮数=
    数字
    $
    (十进制数字介于1000和99999999999之间),以及一个16字符的salt(使用与上述相同的字母表)

salt参数的开头唯一地标识了此处要使用哪种密码哈希算法-因此,是的,如果您使用bcrypt格式的salt(从$2a$开始),它将自动使用bcrypt。

如果您尝试加密密码,只需使用bcrypt,它可能是最安全的@肯怀特:这些问题解释了我的一些问题。他们使用的是16位加密的blowfish。我不确定各种加密类型(如
sha256
@aledalgrande)对我的密码的要求是什么,我将使用bcrypt,它是
CRYPT_-BLOWFISH
,但我的类也将支持其他加密。