PHP crypt()ฟังก์ชั่น
❮ การอ้างอิงสตริง PHP
ความหมายและการใช้งาน
ฟังก์ชัน crypt() ส่งคืนสตริงที่แฮชโดยใช้อัลกอริทึม DES, Blowfish หรือ MD5
ฟังก์ชันนี้ทำงานแตกต่างกันในระบบปฏิบัติการต่างๆ PHP ตรวจสอบอัลกอริทึมที่มีอยู่และอัลกอริทึมที่จะใช้เมื่อติดตั้ง
พารามิเตอร์เกลือเป็นทางเลือก อย่างไรก็ตาม crypt() สร้างรหัสผ่านที่ไม่รัดกุมโดยไม่มีเกลือ ตรวจสอบให้แน่ใจว่าได้ระบุเกลือที่แรงเพียงพอเพื่อความปลอดภัยที่ดีขึ้น
มีบางค่าคงที่ที่ใช้ร่วมกับฟังก์ชัน crypt() ค่าของค่าคงที่เหล่านี้ถูกกำหนดโดย PHP เมื่อทำการติดตั้ง
ค่าคงที่:
- [CRYPT_STD_DES] - แฮชแบบมาตรฐาน DES พร้อมเกลือสองอักขระจากตัวอักษร "./0-9A-Za-z" การใช้อักขระที่ไม่ถูกต้องในเกลือจะทำให้ฟังก์ชันนี้ล้มเหลว
- [CRYPT_EXT_DES] - แฮชแบบขยาย DES ที่มีเกลือเก้าอักขระประกอบด้วยขีดล่างตามด้วยจำนวนการวนซ้ำ 4 ไบต์และเกลือ 4 ไบต์ สิ่งเหล่านี้ถูกเข้ารหัสเป็นอักขระที่สามารถพิมพ์ได้ 6 บิตต่ออักขระ อักขระที่มีนัยสำคัญน้อยที่สุดก่อน ค่า 0 ถึง 63 ถูกเข้ารหัสเป็น "./0-9A-Za-z" การใช้อักขระที่ไม่ถูกต้องในเกลือจะทำให้ฟังก์ชันล้มเหลว
- [CRYPT_MD5] - แฮช MD5 ด้วยเกลือ 12 อักขระที่เริ่มต้นด้วย $1$
- [CRYPT_BLOWFISH] - ปักเป้าปลาปักเป้าด้วยเกลือที่เริ่มต้นด้วย $2a$, $2x$ หรือ $2y$ พารามิเตอร์ต้นทุนสองหลัก "$" และ 22 อักขระจากตัวอักษร "./0-9A-Za-z" . การใช้อักขระนอกตัวอักษรจะทำให้ฟังก์ชันนี้ส่งคืนสตริงที่มีความยาวเป็นศูนย์ พารามิเตอร์ "$" คือลอการิทึมฐาน 2 ของการนับซ้ำสำหรับอัลกอริธึมการแฮชแบบ Blowfish-bashing และต้องอยู่ในช่วง 04-31 ค่าที่อยู่นอกช่วงนี้จะทำให้ฟังก์ชันล้มเหลว
- [CRYPT_SHA_256] - แฮช SHA-256 พร้อมเกลือ 16 อักขระเริ่มต้นที่ $5$ หากสตริงเกลือขึ้นต้นด้วย "rounds=<N>$" ค่าตัวเลขของ N จะถูกใช้เพื่อระบุจำนวนครั้งที่ควรทำ hashing loop เหมือนกับพารามิเตอร์ cost บน Blowfish จำนวนรอบเริ่มต้นคือ 5000 มีขั้นต่ำ 1,000 และสูงสุด 999,999,999 การเลือก N ใดๆ นอกช่วงนี้จะถูกตัดทอนให้ใกล้ที่สุด
- [CRYPT_SHA_512] - แฮช SHA-512 พร้อมเกลือ 16 อักขระเริ่มต้นที่ $6$ หากสตริงเกลือขึ้นต้นด้วย "rounds=<N>$" ค่าตัวเลขของ N จะถูกใช้เพื่อระบุจำนวนครั้งที่ควรทำ hashing loop เหมือนกับพารามิเตอร์ cost บน Blowfish จำนวนรอบเริ่มต้นคือ 5000 มีขั้นต่ำ 1,000 และสูงสุด 999,999,999 การเลือก N ใดๆ นอกช่วงนี้จะถูกตัดทอนให้ใกล้ที่สุด
บนระบบที่ฟังก์ชันนี้สนับสนุนอัลกอริธึมหลายแบบ ค่าคงที่ด้านบนจะถูกตั้งค่าเป็น "1" หากได้รับการสนับสนุน และ "0" ไม่เช่นนั้น
หมายเหตุ:ไม่มีฟังก์ชันถอดรหัส ฟังก์ชัน crypt() ใช้อัลกอริธึมทางเดียว
ไวยากรณ์
crypt(str,salt)
ค่าพารามิเตอร์
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
รายละเอียดทางเทคนิค
คืนมูลค่า: | ส่งกลับสตริงที่เข้ารหัสหรือสตริงที่สั้นกว่า 13 อักขระและรับประกันว่าจะแตกต่างจากเกลือเมื่อล้มเหลว |
---|---|
รุ่น PHP: | 4+ |
บันทึกการเปลี่ยนแปลง: | PHP 5.6.0 - แสดงคำเตือนความปลอดภัย E_NOTICE หากละเว้นเกลือ PHP 5.3.7 - เพิ่มโหมดปลาปักเป้า $2x$ และ $2y$ PHP 5.3.2 - เพิ่ม SHA-256 และ SHA-512 แก้ไขพฤติกรรมปักเป้าในรอบที่ไม่ถูกต้องส่งคืนสตริง "ความล้มเหลว" ("*0" หรือ "*1") แทนที่จะถอยกลับไปที่ DES PHP 5.3.0 - ตอนนี้ PHP มีการใช้งานของตัวเองสำหรับ MD5 crypt, Standard DES, Extended DES และอัลกอริธึม Blowfish และจะใช้สิ่งนั้นหากระบบไม่รองรับอัลกอริธึมตั้งแต่หนึ่งตัวขึ้นไป |
ตัวอย่างเพิ่มเติม
ตัวอย่าง
ในตัวอย่างนี้ เราจะทดสอบอัลกอริทึมต่างๆ:
<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// 12 character salt starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; }
else
{
echo "SHA-256 not supported.\n<br>";
}
// 16 character salt starting with $6$. The default number of rounds is 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.
❮ การอ้างอิงสตริง PHP