ฟังก์ชัน crypt() ส่งคืนสตริงที่เข้ารหัสโดยใช้อัลกอริทึม DES, Blowfish หรือ MD5
ฟังก์ชันนี้มีพฤติกรรมแตกต่างกันไปในระบบปฏิบัติการที่แตกต่างกัน และระบบปฏิบัติการบางระบบรองรับอัลกอริทึมมากกว่าหนึ่งประเภท ณ เวลาติดตั้ง PHP จะตรวจสอบว่ามีอัลกอริธึมใดบ้างและใช้อัลกอริธึมใดบ้าง
อัลกอริธึมที่แน่นอนขึ้นอยู่กับรูปแบบและความยาวของอาร์กิวเมนต์เกลือ Salt สามารถทำให้การเข้ารหัสปลอดภัยยิ่งขึ้นโดยการเพิ่มจำนวนสตริงที่สร้างจากสตริงเฉพาะด้วยวิธีการเข้ารหัสเฉพาะ
นี่คือค่าคงที่บางส่วนที่ใช้กับฟังก์ชัน crypt() ค่าคงที่เหล่านี้ถูกกำหนดโดย PHP ระหว่างการติดตั้ง
คงที่:
[CRYPT_SALT_LENGTH] - ความยาวการเข้ารหัสเริ่มต้น ใช้การเข้ารหัส DES มาตรฐาน ความยาว 2
[CRYPT_STD_DES] - การเข้ารหัสแบบ DES มาตรฐานพร้อมเกลือ 2 อักขระจากตัวอักษร "./0-9A-Za-z" การใช้อักขระที่ไม่ถูกต้องใน Salt จะทำให้ฟังก์ชันล้มเหลว
[CRYPT_EXT_DES] - การเข้ารหัสแบบขยาย DES ด้วยเกลือ 9 อักขระที่ประกอบด้วยขีดล่าง ตามด้วยหมายเลขวนซ้ำ 4 ไบต์และเกลือ 4 ไบต์ สิ่งเหล่านี้ถูกเข้ารหัสเป็นอักขระที่สามารถพิมพ์ได้ 6 บิตต่ออักขระ โดยให้อักขระที่มีนัยสำคัญน้อยที่สุดอยู่ก่อน ค่า 0 ถึง 63 จะถูกเข้ารหัสเป็น "./0-9A-Za-z" การใช้อักขระที่ไม่ถูกต้องใน Salt จะทำให้ฟังก์ชันล้มเหลว
[CRYPT_MD5] - การเข้ารหัส MD5 ที่มีเกลือ 12 ตัวอักษรเริ่มต้นด้วย $1$
[CRYPT_BLOWFISH] - การเข้ารหัสปักเป้ามีเกลือที่เริ่มต้นด้วย $2a$, $2x$ หรือ $2y$ พารามิเตอร์ต้นทุนสองหลัก "$" และจากตัวอักษร "./0-9A-Za-z" 22 ตัวอักษร ใน . การใช้อักขระที่อยู่นอกตัวอักษรจะทำให้ฟังก์ชันส่งคืนสตริงที่มีความยาวเป็นศูนย์ พารามิเตอร์ "$" คือลอการิทึมฐาน 2 ของจำนวนการวนซ้ำของอัลกอริธึมการแฮชของ Blowfish และต้องอยู่ในช่วง 04-31 ค่าที่อยู่นอกช่วงนี้จะทำให้ฟังก์ชันล้มเหลว
[CRYPT_SHA_256] - การเข้ารหัส SHA-256 มีอักขระเกลือ 16 ตัว โดยเริ่มต้นที่ $5$ หากสตริงเกลือขึ้นต้นด้วย "rounds=<N>$" ค่าตัวเลขของ N จะถูกนำมาใช้เพื่อแสดงจำนวนครั้งที่ดำเนินการรอบแฮช คล้ายกับพารามิเตอร์ cost ในปักเป้า จำนวนรอบเริ่มต้นคือ 5,000 ค่าต่ำสุดคือ 1,000 และค่าสูงสุดคือ 999,999,999 ค่าใดๆ ของ N ที่อยู่นอกช่วงนี้จะถูกแปลงเป็นค่าขอบเขตที่ใกล้ที่สุด
[CRYPT_SHA_512] - การเข้ารหัส SHA-512 มีอักขระ 16 ตัว โดยเริ่มต้นที่ $6$ หากสตริงเกลือขึ้นต้นด้วย "rounds=<N>$" ค่าตัวเลขของ N จะถูกนำมาใช้เพื่อแสดงจำนวนครั้งที่ดำเนินการรอบแฮช คล้ายกับพารามิเตอร์ cost ในปักเป้า จำนวนรอบเริ่มต้นคือ 5,000 ค่าต่ำสุดคือ 1,000 และค่าสูงสุดคือ 999,999,999 ค่าใดๆ ของ N ที่อยู่นอกช่วงนี้จะถูกแปลงเป็นค่าขอบเขตที่ใกล้ที่สุด
ในระบบที่ฟังก์ชันนี้รองรับอัลกอริธึมหลายตัว ค่าคงที่ข้างต้นจะถูกตั้งค่าเป็น "1" หากรองรับ และหากไม่เป็นเช่นนั้นให้ตั้งค่าเป็น "0"
หมายเหตุ: ไม่มีฟังก์ชันถอดรหัสที่เกี่ยวข้อง ฟังก์ชัน crypt() ใช้อัลกอริธึมแบบทางเดียว
ฝังศพใต้ถุนโบสถ์ ( str, เกลือ )
พารามิเตอร์ | อธิบาย |
---|---|
STR | ที่จำเป็น. ระบุสตริงที่จะเข้ารหัส |
เกลือ | ไม่จำเป็น. สตริงที่ใช้เพื่อเพิ่มจำนวนอักขระที่ถูกเข้ารหัสเพื่อทำให้การเข้ารหัสมีความปลอดภัยมากขึ้น หากไม่มีการระบุอาร์กิวเมนต์เกลือ ระบบจะสุ่มสร้างอาร์กิวเมนต์ทุกครั้งที่เรียกใช้ฟังก์ชัน |
ค่าส่งคืน: | ส่งคืนสตริงที่เข้ารหัส หรือหากล้มเหลว สตริงที่มีความยาวน้อยกว่า 13 อักขระที่รับประกันว่าจะแตกต่างจาก Salt |
---|---|
เวอร์ชัน PHP: | 4+ |
บันทึกการอัปเดต: | ใน PHP 5.3.7 มีการเพิ่มโหมด Blowfish $2x$ และ $2y$ เพื่อจัดการกับการโจมตีระดับสูงที่อาจเกิดขึ้น ใน PHP 5.3.2 มีการเพิ่มค่าคงที่ใหม่ SHA-256 และ SHA-512 ตั้งแต่ PHP 5.3.2 เป็นต้นไป Blowfish จะส่งกลับสตริง "failure" ("*0" หรือ "*1") ในลูปที่ไม่ถูกต้อง แทนที่จะถอยกลับไปที่ DES ตั้งแต่ PHP 5.3.0 เป็นต้นมา PHP มาพร้อมกับการใช้งานการเข้ารหัส MD5, การใช้งาน DES มาตรฐาน, การใช้งาน DES แบบขยาย และอัลกอริธึม Blowfish หากระบบไม่รองรับอัลกอริธึมข้างต้น อัลกอริธึมของ PHP จะถูกนำมาใช้ |
ใช้ htpasswd สำหรับการเข้ารหัส crypt():
<?php // ตั้งรหัสผ่าน $password = ' mypassword ' ; // รับค่าแฮช, ใช้ค่าเกลืออัตโนมัติ $hash = ฝัง ศพ ใต้ถุนโบสถ์ ( $password ) ;ในตัวอย่างนี้ เราใช้ประเภทแฮชที่แตกต่างกัน:
<?php ถ้า ( CRYPT_STD_DES == 1 ) - เสียงสะท้อน ' DES มาตรฐาน : ' . ฝัง ศพ ใต้ถุน โบสถ์ ( ' rasmuslerdorf ' , ' rl ' ) . ถ้า ( CRYPT_EXT_DES == 1 ) - เสียงสะท้อน ' DES แบบ ขยาย : ' . crypt ( ' rasmuslerdorf ' , ' _J9..rasm ' ) } ถ้า ( CRYPT_MD5 == 1 ) - เสียงสะท้อน ' MD5: ' . ฝัง ศพ ใต้ถุน โบสถ์ ( ' rasmuslerdorf ' , ' $ 1 $ rasmusle$ ' ) } ถ้า ( CRYPT_BLOWFISH == 1 ) - เสียงสะท้อน ' ปักเป้า: ' . crypt ( ' rasmuslerdorf ' , ' $ 2a $ 07 $ usesomesillystringforsalt $ ' ) ถ้า ( CRYPT_SHA256 == 1 ) - เสียงสะท้อน ' SHA-256: ' . ฝัง ศพ ใต้ถุนโบสถ์ ( ' rasmuslerdorf ' , ' $ 5$ rounds = 5000 $usesomesillystringforsalt$ ' ) } ถ้า ( CRYPT_SHA512 == 1 ) - เสียงสะท้อน ' SHA-512: ' . ฝัง ศพ ใต้ถุนโบสถ์ ( ' rasmuslerdorf ' , ' $ 6$ rounds = 5000 $usesomesillystringforsalt$ ' ) } -รหัสข้างต้นแสดงผลลัพธ์ต่อไปนี้ (ขึ้นอยู่กับระบบปฏิบัติการ):
DES มาตรฐาน: rl.3StKT.4T8ME DES แบบขยาย: _J9..rasmBYk8r9AiWNcMD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0ปลาปักเป้า: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hiSHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21