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.