PHP crypt() ຈັກນວນ

ການອະທິບາຍ ແລະ ການນຳໃຊ້

crypt() ຈະກັບຄືນຄວາມທີ່ຖືກຂັບເຄືອຂັບພາສາບິບ DES, Blowfish ຫຼື MD5.

ການດຳເນີນຂອງຫົວຫນື່ງຈະຕັດສິດຫຼາຍຢູ່ໃນລະບົບປະຕິບັດການທີ່ແຕກຕ່າງກັນ, ບາງລະບົບປະຕິບັດການສະຫຼາດຢູ່ບາງຮູບແບບການຂັບເຄືອຂັບ. ໃນເວລາການຕິດຕັ້ງ, PHP ຈະກວດກາທີ່ມີການຂັບເຄືອຂັບທີ່ຈະດຳເນີນແລະທີ່ຈະນຳໃຊ້.

ການຂັບເຄືອຂັບພາສາບິບມີຄວາມພິເສດຂຶ້ນພາຍໃຕ້ການຂອງຄວາມຄິດວຽນ salt ແລະຄວາມຄະແນນຂະໜາດ. ການເພີ່ມຈຳນວນຄວາມທີ່ຖືກກະຕຸ້ມໂດຍຄວາມທີ່ຖືກນຳໃຊ້ຕາມການຂັບເຄືອຂັບພາສາບິບສະເພາະຈະເຮັດໃຫ້ການຂັບເຄືອຂັບມີຄວາມປອດໄພຫຼາຍຂື້ນ.

ມັນມີຄວາມປະສົງກັນຈຳນວນຫຼາຍທີ່ຖືກນຳໃຊ້ພ້ອມກັບການກະຕຸ້ມ crypt(). ຄວາມປະສົງກັນນີ້ຈະຖືກກະຕຸ້ມໂດຍ PHP ໃນເວລາການຕິດຕັ້ງ.

ຄວາມປະສົງກັນ:

[CRYPT_SALT_LENGTH] ຄວາມຄະແນນຂະໜາດຂອງການຂັບເຄືອຂັບ. ການຂັບເຄືອຂັບ DES ສະເພາະ, ຄວາມຄະແນນຂະໜາດຈະແມ່ນ 2.
[CRYPT_STD_DES] ການຂັບເຄືອຂັບພາສາບິບ DES ຕັ້ງໂຕດບອກດ້ວຍ 2 ຄວາມຈາກ "./0-9A-Za-z". ການນຳໃຊ້ຄວາມທີ່ບໍ່ຖືກອະນຸຍາດໃນຄວາມຄິດວຽນຈະເຮັດໃຫ້ crypt() ລົ້ມ.
[CRYPT_EXT_DES] ການຂະຫຍາຍການຂັບເຄືອຂັບພາສາບິບ DES. ຄວາມຄິດວຽນຂອງການກະຕຸ້ມແມ່ນສາຍຄວາມ 9 ຄວາມ, ຕັ້ງໂຕດບອກດ້ວຍ 1 ຄວາມຫົວລະພັງຫຼັງຈາກ 4 ຄວາມອັດສະນະສະເຫຼີມ ແລະ 4 ຄວາມຄວາມກະຕຸ້ມ. ພວກມັນຖືກກະຕຸ້ມເປັນຄວາມທີ່ສາມາດອອກມາໄດ້, ກັບຄວາມທີ່ມີຈຳນວນບາງຫຼາຍສຳຮອງກັນສຳລັບຄວາມທີ່ມີຈຳນວນບາງຫຼາຍສຳຮອງກັນສຳລັບຄວາມທີ່ມີຈຳນວນບາງຫຼາຍສຳຮອງກັນ. 0 ຫາ 63 ຖືກກະຕຸ້ມເປັນ "./0-9A-Za-z". ການນຳໃຊ້ຄວາມທີ່ບໍ່ຖືກອະນຸຍາດໃນຄວາມຄິດວຽນຈະເຮັດໃຫ້ crypt() ລົ້ມ.
[CRYPT_MD5] MD5 散列使用一个以 $1$ 开始的 12 字符的字符串盐值。
[CRYPT_BLOWFISH] Blowfish 算法使用如下盐值:“$2a$”,一个两位 cost 参数,“$” 以及 64 位由 “./0-9A-Za-z” 中的字符组合而成的字符串。在盐值中使用此范围之外的字符将导致 crypt() 返回一个空字符串。两位 cost 参数是循环次数以 2 为底的对数,它的范围是 04-31,超出这个范围将导致 crypt() 失败。
CRYPT_SHA256 ການດິນນະພາບ SHA-256 ນຳໃຊ້ຄວາມສານລະຫວ່າງ 16 ຄັກທີ່ເລີ່ມດ້ວຍ $5$. ຖ້າຄວາມສານລະຫວ່າງເລີ່ມດ້ວຍ “rounds=<N>$”, ຈຳນວນ N ຈະຖືກໃຊ້ເພື່ອການຈັດຕັ້ງການດິນນະພາບສັບສາຍ, ທີ່ຄ້າຍຄືກັບຄວາມ cost ຂອງການດິນນະພາບ Blowfish. ຈຳນວນສັບສາຍຄົງທີ່ເປັນສະຖິຕິແມ່ນ 5000, ລາຍຍາວໄລຍະທີ່ນ້ອຍແມ່ນ 1000, ແລະທີ່ໃຫຍ່ແມ່ນ 999,999,999. ຈຳນວນ N ທີ່ປະພຶດກວ່າຈຳນວນດັ່ງກ່າວຈະຖືກປ່ຽນເປັນຈຳນວນທີ່ຫຼາຍທີ່ສຸດ.
CRYPT_SHA512 ການດິນນະພາບ SHA-512 ນຳໃຊ້ຄວາມສານລະຫວ່າງ 16 ຄັກທີ່ເລີ່ມດ້ວຍ $6$. ຖ້າຄວາມສານລະຫວ່າງເລີ່ມດ້ວຍ “rounds=<N>$”, ຈຳນວນ N ຈະຖືກໃຊ້ເພື່ອການຈັດຕັ້ງການດິນນະພາບສັບສາຍ, ທີ່ຄ້າຍຄືກັບຄວາມ cost ຂອງການດິນນະພາບ Blowfish. ຈຳນວນສັບສາຍຄົງທີ່ເປັນສະຖິຕິແມ່ນ 5000, ລາຍຍາວໄລຍະທີ່ນ້ອຍແມ່ນ 1000, ແລະທີ່ໃຫຍ່ແມ່ນ 999,999,999. ຈຳນວນ N ທີ່ປະພຶດກວ່າຈຳນວນດັ່ງກ່າວຈະຖືກປ່ຽນເປັນຈຳນວນທີ່ຫຼາຍທີ່ສຸດ.

ໃນລະບົບທີ່ສະຫຼາການກະຈາຍກັບຄູ່ມືຫຼາກຫຼາຍທາງ, ຖ້າມີຄວາມສະຫຼາກດັ່ງກ່າວຈະໄດ້ການຕັ້ງຢູ່ "1", ບໍ່ຈະໄດ້ການຕັ້ງຢູ່ "0".

ຄວາມເຫັນ:ບໍ່ມີການກະຈາຍຄືກັນ. crypt() ກົນຫຼັກພົບກັບການດິນນະພາບຫນຶ່ງຫົວ.

ສັນຍາ

crypt(str,salt)
ປະເພດ ອະທິບາຍ
str ສະຫງົບ. ຕາມຄຳຕອບທີ່ຕ້ອງການບັນນາທິບາຍ.
salt ສາມາດເປັນທາງດຳເນີນ. ພົບພາສາທີ່ເພີ່ມຕົວການບັນນາທິບາຍຄວາມທີ່ຖືກກັບເພື່ອເຮັດໃຫ້ການກັບເພື່ອການປັບປຸງມີຄວາມປອດໄພຫຼາຍຂື້ນ. ຖ້າບໍ່ມີການຕອບຂໍ້ສິນລະຫວ່າງ salt, PHP ຈະປະກອບເອົາຄວາມສະຫຼາກຫຼືຄວາມທີ່ຫຼາຍກວ່າ 13 ຄັກໃນເວລາທີ່ກະທຳການເລືອກຫຼືການເຮັດວຽກ.

ລະອຽດດ້ານເຕັກນິກ

ຄູ່ມືກັບຄຳຕອບ: ການຫຼົງຂໍ້ຄວາມກັບການປັບສະຫຼາກຫຼືຂໍ້ຄວາມຍາວຍາກວ່າ 13 ຄັກເພື່ອຮັບມືກັບຄວາມແຕກຕ່າງຈາກຄູ່ມືສານລະຫວ່າງ.
PHP 版本: 4+

ບັນທຶກການປັບປຸງ

ລະບົບ ຄວາມອະທິບາຍ
5.3.2 ນຳມາຈາກການພັດທະນາຂອງ Ulrich Drepper, ຕິດຕາມ crypt SHA-256 ແລະ SHA-512.
5.3.2 ແກ້ໄຂເຫດຄວາມຜິດພາດຂອງການທຳນາຍ Blowfish ທີ່ມີບັນຫາຂອງການວົງກັນບໍ່ຖືກກວດກາ, ທີ່ຈະກັບຄືນຄະແນນ
5.3.0 PHP ປະຈຸບັນກວມເອົາ crypt MD5 ຂອງຕົວເອງໄປ ລວມທັງການທຳນາຍ DES ຄົນແມ່ນມີ, DES ຂະຫຍາຍ, ແລະ Blowfish. ຖ້າລະບົບບໍ່ມີການພັດທະນາຂອງການຂັ້ນຕອນດັ່ງກ່າວ ພາຍະ PHP ຈະໃຊ້ການພັດທະນາຂອງຕົວເອງຂອງຕົວເອງ.

ຄວາມລະອຽດ

ຕົວຢ່າງ 1

ໃນການຕັ້ງທີ່ນີ້ ພວກເຮົາຈະທົດລອງບັນດາການຂັ້ນຕອນທີ່ຫຼາກຫຼາຍ:

<?php
// 两字符 salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 字符 salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
//以 $1$ 开始的 12 字符
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// 以 $2a$ 开始的 Salt。双数字的 cost 参数:09. 22 字符
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 以 $5$ 开始的 16 字符 salt。周长的默认数是 5000。
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>";
else
{
echo "SHA-256 not supported.\n<br>";
}
// 以 $5$ 开始的 16 字符 salt。周长的默认数是 5000。
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>

ຄຳອອກຂອງວິດີໂອດັ່ງກ່າວ (ຖືກຄວາມຈິງຈາກລະບົບປະຕິບັດ):

Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.