<PHP สตริงอ้างอิง
ความหมายและการใช้งาน
crypt() ฟังก์ชันส่งกลับสตริงถกใช้ DES ปักเป้าหรืออัลกอริทึม MD5
ฟังก์ชั่นนี้มีลักษณะการทำงานที่แตกต่างกันบนระบบปฏิบัติการที่แตกต่างกัน PHP ตรวจสอบสิ่งที่อัลกอริทึมที่มีอยู่และสิ่งที่ขั้นตอนวิธีการที่จะใช้เมื่อมีการติดตั้ง
พารามิเตอร์เกลือเป็นตัวเลือก แต่ crypt() สร้างรหัสผ่านที่อ่อนแอโดยไม่ต้องเกลือ ตรวจสอบให้แน่ใจเพื่อระบุเกลือที่แข็งแกร่งพอสำหรับการรักษาความปลอดภัยที่ดีขึ้น
มีค่าคงที่บางอย่างที่ใช้ร่วมกับการมี crypt() ฟังก์ชั่น ค่าของค่าคงที่เหล่านี้ถูกกำหนดโดย PHP เมื่อมีการติดตั้ง
ค่าคงที่:
- [CRYPT_STD_DES] - มาตรฐาน DES-based กัญชาด้วยตัวอักษรสองเกลือจากตัวอักษร "./0-9A-Za-z" การใช้ตัวอักษรที่ไม่ถูกต้องในเกลือจะทำให้ฟังก์ชั่นนี้จะล้มเหลว
- [CRYPT_EXT_DES] - ขยายกัญชา DES-based กับเกลือเก้าตัวอักษรประกอบด้วยขีดตามด้วย 4 ไบต์ของการนับซ้ำและ 4 ไบต์ของเกลือ เหล่านี้จะถูกเข้ารหัสเป็นตัวอักษรพิมพ์, 6 บิตต่อตัวละครตัวละครที่สำคัญไม่น้อยกว่าครั้งแรก ค่า 0-63 ที่มีการเข้ารหัสเป็น "./0-9A-Za-z" การใช้ตัวอักษรที่ไม่ถูกต้องในเกลือจะทำให้เกิดการทำงานที่จะล้มเหลว
- [CRYPT_MD5] - MD5 hashing ด้วยเกลือ 12 ตัวอักษรที่ขึ้นต้นด้วย $ 1 $
- [CRYPT_BLOWFISH] - คร่ำเครียดปักเป้ากับเกลือที่เริ่มต้นด้วย $ 2a $, $ 2x $ หรือ $ $ 2y สองพารามิเตอร์ค่าใช้จ่ายหลัก "$" , และ 22 ตัวอักษรจากตัวอักษร "./0-9A-Za-z" . การใช้อักขระด้านนอกของตัวอักษรจะทำให้ฟังก์ชั่นนี้เพื่อกลับสตริงความยาวเป็นศูนย์ "$" พารามิเตอร์เป็นฐาน-2 ลอการิทึมของการนับซ้ำสำหรับต้นแบบปักเป้า-ทุบ algorithmeter hashing และต้องอยู่ในช่วง 04-31 ค่านอกช่วงนี้จะทำให้เกิดการทำงานที่จะล้มเหลว
- [CRYPT_SHA_256] - กัญชา SHA-256 ด้วยเกลือ 16 ตัวอักษรที่ขึ้นต้นด้วย $ 5 $ ถ้าสตริงเกลือเริ่มต้นด้วย "rounds=<N>$" , ค่าตัวเลขของ N จะใช้ในการระบุจำนวนครั้งที่ห่วงคร่ำเครียดควรจะดำเนินการเหมือนพารามิเตอร์ค่าใช้จ่ายในปักเป้า หมายเลขเริ่มต้นของรอบ 5000 มีขั้นต่ำ 1000 และไม่เกิน 999,999,999 ตัวเลือกใด ๆ ของ N นอกช่วงนี้จะถูกตัดออกไปขีด จำกัด ที่ใกล้ที่สุด
- [CRYPT_SHA_512] - กัญชา SHA-512 ด้วยเกลือ 16 ตัวละครที่เริ่มต้นด้วยราคา $ 6 $ ถ้าสตริงเกลือเริ่มต้นด้วย "rounds=<N>$" , ค่าตัวเลขของ N จะใช้ในการระบุจำนวนครั้งที่ห่วงคร่ำเครียดควรจะดำเนินการเหมือนพารามิเตอร์ค่าใช้จ่ายในปักเป้า หมายเลขเริ่มต้นของรอบ 5000 มีขั้นต่ำ 1000 และไม่เกิน 999,999,999 ตัวเลือกใด ๆ ของ N นอกช่วงนี้จะถูกตัดออกไปขีด จำกัด ที่ใกล้ที่สุด
ในระบบที่ฟังก์ชั่นนี้รองรับขั้นตอนวิธีการหลายค่าคงที่ดังกล่าวข้างต้นมีการกำหนดให้ "1" ถ้าได้รับการสนับสนุนและ "0" เป็นอย่างอื่น
Note: ไม่มีฟังก์ชั่นการถอดรหัสคือ crypt() ฟังก์ชั่นใช้วิธีทางเดียว
วากยสัมพันธ์
crypt( str,salt )
พารามิเตอร์ | ลักษณะ |
---|---|
str | จำเป็นต้องใช้ ระบุสตริงที่จะถกกัน |
salt | ไม่จำเป็น. สตริงเกลือไปยังฐาน hashing บน |
รายละเอียดทางเทคนิค
กลับค่า: | ส่งกลับสตริงเข้ารหัสหรือสตริงที่สั้นกว่า 13 ตัวและมีการรับประกันว่าจะแตกต่างจากเกลือที่มีต่อความล้มเหลว |
---|---|
PHP เวอร์ชัน: | 4+ |
การเปลี่ยนแปลง: | $ 2x $ และ $ 2y โหมด $ ปักเป้าถูกเพิ่มใน PHP 5.3.7 การจัดการกับการโจมตีบิตสูงที่อาจเกิดขึ้น คง SHA-256 และ SHA-512 ถูกเพิ่มใน PHP 5.3.2 ในฐานะของ PHP 5.3.2 พฤติกรรมปักเป้าในรอบที่ไม่ถูกต้องส่งกลับ "failure" สตริง ("*0" or "*1") แทนที่จะลดลงกลับไป DES ในฐานะของ PHP 5.3.0, PHP มีการดำเนินการของตัวเองสำหรับฝังศพใต้ถุนโบสถ์ MD5 มาตรฐาน DES, ขยาย DES และอัลกอริทึมปักเป้าและจะใช้ว่าถ้าระบบขาดการสนับสนุนสำหรับหนึ่งหรือมากกว่าของอัลกอริทึม |
ตัวอย่าง
ตัวอย่างที่ 1
ในตัวอย่างนี้เราจะทดสอบขั้นตอนวิธีการที่แตกต่างกัน:
<?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 $5$. 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.";
}
?>
การส่งออกของโค้ดข้างต้นอาจจะ (depending on the operating system) :
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 สตริงอ้างอิง