ฟังก์ชัน crypt() ของ PHP
การกำหนดและการใช้
ฟังก์ชัน crypt() กลับค่าที่เรียกขอรหัสลับโดยใช้รูปแบบ DES หรือ Blowfish หรือ MD5
การทำงานของฟังก์ชันนี้แตกต่างกันตามระบบปฏิบัติการ บางระบบปฏิบัติการสนับสนุนชนิดการคำนวณหลายชนิด ในการติดตั้ง PHP จะตรวจสอบรูปแบบที่สามารถใช้และใช้รูปแบบใด
รูปแบบของการคำนวณนั้นขึ้นอยู่กับรูปแบบและความยาวของตัวแปร salt โดยเพิ่มจำนวนของตัวแปรที่สร้างโดยข้อความที่ใช้กับวิธีการเรียกขอรหัสลับเฉพาะที่เจาะจง salt สามารถทำให้การเรียกขอรหัสลับมีความปลอดภัยมากขึ้น
นี่เป็นบางค่าคงที่ที่ใช้พร้อมกับฟังก์ชัน crypt() ค่าที่มีความหมายของค่าคงที่นี้ถูกตั้งโดย PHP ในการติดตั้ง
ค่าคงที่
[CRYPT_SALT_LENGTH] | ความยาวที่เรียกขอรหัสลับโดยมาตรฐาน |
[CRYPT_STD_DES] | การเรียกขอรหัสลับที่ใช้กลุ่มรูปแบบ DES มาตรฐาน ใช้ตัวอักษรสองตัวจาก "/./0-9A-Za-z" ในการใช้สายแก้ว การใช้ตัวอักษรที่ผิดกฎระเบียบในสายแก้วจะทำให้ crypt() ล้มเหลว |
[CRYPT_EXT_DES] | การเรียกขอรหัสลับของ DES ที่ขยายรูปแบบ มีสายแก้ว 9 ตัวอักษร ประกอบด้วยเชื่อมต่อหลังจากตัวอักษรชาติอักษรหนึ่งและตามด้วย 4 ไบต์จำนวนที่วนลูกเล่นและ 4 ไบต์สายแก้ว ที่ถูกเข้ารหัสเป็นตัวอักษรที่สามารถพิมพ์ได้ 6 ตำแหน่ง ตัวอักษรที่มีตำแหน่งที่น้อยที่สุดมีความสำคัญสูงสุด 0 ถึง 63 ถูกเข้ารหัสเป็น "/./0-9A-Za-z" การใช้ตัวอักษรที่ผิดกฎระเบียบในสายแก้วจะทำให้ crypt() ล้มเหลว |
[CRYPT_MD5] | การหยุดยั้ง MD5 ใช้ salt 12 ตัวอักษรที่เริ่มต้นด้วย $1$ |
[CRYPT_BLOWFISH] | อัลกอริทึม Blowfish ใช้ salt ดังนี้: “$2a$”, พาเมเมอร์ cost 2 ตัวเลข, “$” และ 64 ตัวอักษรที่เป็นผลผลิตจาก “./0-9A-Za-z” ถ้าใช้ตัวอักษรนอกจากช่วงนี้ใน salt จะทำให้ crypt() กลับค่าว่าง พาเมเมอร์ cost 2 ตัวเลขเป็นจำนวนรอบการหยุดยั้งที่เป็นลอเกอริธึมสองตัว ขอบเขตคือ 04-31 การเกินขอบเขตนี้จะทำให้ crypt() ล้มเหลว |
CRYPT_SHA256 | อัลกอริทึม SHA-256 ใช้ salt 16 ตัวอักษรที่เริ่มต้นด้วย $5$ สำหรับการหยุดยั้ง ถ้าตัวเรียก salt มีข้อความที่เริ่มต้นด้วย "rounds=<N>$" ข้อความตัวเลข N จะถูกใช้เพื่อกำหนดจำนวนรอบการหยุดยั้งที่ทำ นี่เหมือนกับพาเมเมอร์ cost ของอัลกอริทึม Blowfish โดยเริ่มต้นด้วย 5000 ข้อความตัวเลขน้อยที่สุดเท่ากับ 1000 และมากที่สุดเท่ากับ 999,999,999 ข้อความตัวเลขน้อยที่สุดที่อยู่ในระบบจะถูกปรับเป็นข้อความตัวเลขที่ใกล้ที่สุด |
CRYPT_SHA512 | อัลกอริทึม SHA-512 ใช้ salt 16 ตัวอักษรที่เริ่มต้นด้วย $6$ สำหรับการหยุดยั้ง ถ้าตัวเรียก salt มีข้อความที่เริ่มต้นด้วย "rounds=<N>$" ข้อความตัวเลข N จะถูกใช้เพื่อกำหนดจำนวนรอบการหยุดยั้งที่ทำ นี่เหมือนกับพาเมเมอร์ cost ของอัลกอริทึม Blowfish โดยเริ่มต้นด้วย 5000 ข้อความตัวเลขน้อยที่สุดเท่ากับ 1000 และมากที่สุดเท่ากับ 999,999,999 ข้อความตัวเลขน้อยที่สุดที่อยู่ในระบบจะถูกปรับเป็นข้อความตัวเลขที่ใกล้ที่สุด |
ในระบบที่สนับสนุนอัลกอริทึมมากกว่าหนึ่งที่สนับสนุนตัวเรียกดังกล่าว ถ้าสนับสนุนตัวเรียกค่าที่กล่าวข้างต้นเป็น "1" ไม่เช่นนั้นให้ตั้งเป็น "0"
หมายเหตุ:ไม่มีฟังก์ชันการเข้ารหัสที่สอดคล้อง ฟังก์ชัน crypt() ใช้แนวทางการเข้ารหัสหนึ่งทางเดียว
รูปแบบการใช้
crypt(str,salt)
ตัวแปร | คำอธิบาย |
---|---|
str | จำเป็นต้องมีค่า。กำหนดข้อความที่ต้องการเข้ารหัส |
salt | ทางเลือกได้。ใช้สำหรับเพิ่มตัวอักษรที่เข้ารหัสเพื่อทำให้การเข้ารหัสมีความปลอดภัยยิ่งขึ้น ถ้าไม่ให้ค่า salt ระบุไว้ แล้ว PHP จะสร้าง salt ใหม่สุ่มทุกครั้งที่เรียกฟังก์ชัน |
รายละเอียดเทคนิค
ค่าที่กลับค่า | กลับค่าสายที่เข้ารหัสหรือค่าที่มีตัวอักษรน้อยกว่า 13 ตัวเพื่อแน่ใจว่าเมื่อการเข้ารหัสล้มเหลวจะแยกต่างจาก salt ได้ |
PHP รุ่น: | 4+ |
ประวัติการปรับปรุง
รุ่น | รายละเอียด |
---|---|
5.3.2 | เพิ่ม crypt ที่มีการทำงานของ Ulrich Drepper ซึ่งมี crypt ที่มีการทำงานของอัลกอริทฐม์ SHA-256 และ SHA-512 |
5.3.2 | แก้ปัญหาของ Blowfish ที่มีการวนที่ผิดกฎทำให้กลับมาแสดงข้อความ "ล้มเหลว" ("*0" หรือ "*1") แทนที่จะใช้อัลกอริทฐม์ DES |
5.3.0 | PHP ปัจจุบันมีความร่วมมือด้วย MD5 Crypt ของตัวเอง รวมถึงอัลกอริทฐม์ DES มาตรฐาน อัลกอริทฐม์ DES ขยายและอัลกอริทฐม์ Blowfish ถ้าระบบขาดการทำงานที่เหมาะสม พีเอ็ชพีจะใช้ความร่วมมือของตัวเอง |
ตัวอย่าง
ตัวอย่าง 1
ในตัวอย่างนี้ เราจะทดสอบแนวทางต่างๆ:
<?php // Salt 2 ตัวอักษร if (CRYPT_STD_DES == 1) { echo "Standard DES: ".crypt('something','st')."\n<br>"; } else { echo "Standard DES ไม่สนับสนุน.\n<br>"; } // Salt 4 ตัวอักษร if (CRYPT_EXT_DES == 1) { echo "Extended DES: ".crypt('something','_S4..some')."\n<br>"; } else { echo "Extended DES ไม่สนับสนุน.\n<br>"; } // Salt ที่เริ่มต้นด้วย $1$ คือ 12 ตัวอักษร if (CRYPT_MD5 == 1) { echo "MD5: ".crypt('something','$1$somethin$')."\n<br>"; } else { echo "MD5 ไม่สนับสนุน.\n<br>"; } // Salt ที่เริ่มต้นด้วย $2a$ คือ cost ที่เป็นเลขสองหลัก: 09 ตัวอักษร if (CRYPT_BLOWFISH == 1) { echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>"; } else { echo "Blowfish DES ไม่สนับสนุน.\n<br>"; } // ซาลท์ 16 อักษรที่เริ่มต้นด้วย $5$ มีค่าเริ่มต้นค่าความยาวโดยปริยายคือ 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 อักษรที่เริ่มต้นด้วย $5$ มีค่าเริ่มต้นค่าความยาวโดยปริยายคือ 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.