PHP crypt() º¯Êý

¶¨ÒåºÍÓ÷¨

crypt() º¯Êý·µ»ØÊ¹Óà DES¡¢Blowfish »ò MD5 Ëã·¨¼ÓÃܵÄ×Ö·û´®¡£

ÔÚ²»Í¬µÄ²Ù×÷ϵͳÉÏ£¬¸Ãº¯ÊýµÄÐÐΪ²»Í¬£¬Ä³Ð©²Ù×÷ϵͳ֧³ÖÒ»ÖÖÒÔÉϵÄËã·¨ÀàÐÍ¡£ÔÚ°²×°Ê±£¬PHP »á¼ì²éʲôËã·¨¿ÉÓÃÒÔ¼°Ê¹ÓÃʲôËã·¨¡£

¾ßÌåµÄËã·¨ÒÀÀµÓÚ salt ²ÎÊýµÄ¸ñʽºÍ³¤¶È¡£Í¨¹ýÔö¼ÓÓÉʹÓÃÌØ¶¨¼ÓÃÜ·½·¨µÄÌØ¶¨×Ö·û´®ËùÉú³ÉµÄ×Ö·û´®ÊýÁ¿£¬salt ¿ÉÒÔʹ¼ÓÃܸü°²È«¡£

ÕâÀïÓÐһЩºÍ crypt() º¯ÊýÒ»ÆðʹÓõij£Á¿¡£ÕâЩ³£Á¿ÖµÊÇÔÚ°²×°Ê±ÓÉ PHP ÉèÖõġ£

³£Á¿£º

[CRYPT_SALT_LENGTH] ĬÈϵļÓÃܳ¤¶È¡£Ê¹Óñê×¼µÄ DES ¼ÓÃÜ£¬³¤¶ÈΪ 2
[CRYPT_STD_DES] »ùÓÚ±ê×¼ DES Ëã·¨µÄÉ¢ÁÐʹÓà "./0-9A-Za-z" ×Ö·ûÖеÄÁ½¸ö×Ö·û×÷ΪÑÎÖµ¡£ÔÚÑÎÖµÖÐʹÓ÷Ƿ¨µÄ×Ö·û½«µ¼Ö crypt() ʧ°Ü¡£
[CRYPT_EXT_DES] À©Õ¹µÄ»ùÓÚ DES Ëã·¨µÄÉ¢ÁС£ÆäÑÎֵΪ 9 ¸ö×Ö·ûµÄ×Ö·û´®£¬ÓÉ 1 ¸öÏ»®ÏߺóÃæ¸ú×Å 4 ×Ö½ÚÑ­»·´ÎÊýºÍ 4 ×Ö½ÚÑÎÖµ×é³É¡£ËüÃDZ»±àÂë³É¿É´òÓ¡×Ö·û£¬Ã¿¸ö×Ö·û 6 룬ÓÐЧλ×îÉÙµÄÓÅÏÈ¡£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 Ë㷨ʹÓÃÒ»¸öÒÔ $5$ ¿ªÍ·µÄ 16 ×Ö·û×Ö·û´®ÑÎÖµ½øÐÐÉ¢ÁС£Èç¹ûÑÎÖµ×Ö·û´®ÒÔ ¡°rounds=<N>$¡± ¿ªÍ·£¬N µÄÊý×ÖÖµ½«±»ÓÃÀ´Ö¸¶¨É¢ÁÐÑ­»·µÄÖ´ÐдÎÊý£¬ÕâµãºÜÏñ Blowfish Ëã·¨µÄ cost ²ÎÊý¡£Ä¬ÈϵÄÑ­»·´ÎÊýÊÇ 5000£¬×îСÊÇ 1000£¬×î´óÊÇ 999,999,999¡£³¬³öÕâ¸ö·¶Î§µÄ N ½«»á±»×ª»»Îª×î½Ó½üµÄÖµ¡£
CRYPT_SHA512 SHA-512 Ë㷨ʹÓÃÒ»¸öÒÔ $6$ ¿ªÍ·µÄ 16 ×Ö·û×Ö·û´®ÑÎÖµ½øÐÐÉ¢ÁС£Èç¹ûÑÎÖµ×Ö·û´®ÒÔ ¡°rounds=<N>$¡± ¿ªÍ·£¬N µÄÊý×ÖÖµ½«±»ÓÃÀ´Ö¸¶¨É¢ÁÐÑ­»·µÄÖ´ÐдÎÊý£¬ÕâµãºÜÏñ Blowfish Ëã·¨µÄ cost ²ÎÊý¡£Ä¬ÈϵÄÑ­»·´ÎÊýÊÇ 5000£¬×îСÊÇ 1000£¬×î´óÊÇ 999,999,999¡£³¬³öÕâ¸ö·¶Î§µÄ N ½«»á±»×ª»»Îª×î½Ó½üµÄÖµ¡£

Ôڸú¯ÊýÖ§³Ö¶àÖÖËã·¨µÄϵͳÉÏ£¬Èç¹ûÖ§³ÖÉÏÊö³£Á¿ÔòÉèÖÃΪ "1"£¬·ñÔòÉèÖÃΪ "0"¡£

×¢ÊÍ£ºÃ»ÓÐÏàÓ¦µÄ½âÃܺ¯Êý¡£crypt() º¯ÊýʹÓÃÒ»ÖÖµ¥ÏòËã·¨¡£

Óï·¨

crypt(str,salt)
²ÎÊý ÃèÊö
str ±ØÐè¡£¹æ¶¨Òª±àÂëµÄ×Ö·û´®¡£
salt ¿ÉÑ¡¡£ÓÃÓÚÔö¼Ó±»±àÂë×Ö·ûÊýÄ¿µÄ×Ö·û´®£¬ÒÔʹ±àÂë¸ü¼Ó°²È«¡£Èç¹ûδÌṩ salt ²ÎÊý£¬Ôòÿ´Îµ÷Óøú¯Êýʱ PHP »áËæ»úÉú³ÉÒ»¸ö¡£

¼¼Êõϸ½Ú

·µ»ØÖµ£º ·µ»Ø¼ÓÃܺóµÄ×Ö·û´®»òÒ»¸öÉÙÓÚ 13 ×Ö·ûµÄ×Ö·û´®£¬´Ó¶ø±£Ö¤ÔÚʧ°ÜʱÓëÑÎÖµÇø·Ö¿ªÀ´¡£
PHP °æ±¾£º 4+

¸üÐÂÈÕÖ¾

°æ±¾ ˵Ã÷
5.3.2 »ùÓÚ Ulrich Drepper µÄʵÏÖ£¬ÐÂÔö»ùÓÚ SHA-256 Ëã·¨ºÍ SHA-512 Ëã·¨µÄ crypt¡£
5.3.2 ÐÞÕýÁË Blowfish Ëã·¨ÓÉÓÚ·Ç·¨Ñ­»·µ¼ÖµÄÎÊÌ⣬·µ»Ø¡°Ê§°Ü¡±×Ö·û´®£¨¡°*0¡± »ò ¡°*1¡±£©¶ø²»ÊÇת¶øÊ¹Óà DES Ëã·¨¡£
5.3.0 PHP ÏÖÔÚ°üº¬ÁËËü×Ô¼ºµÄ MD5 Crypt ʵÏÖ£¬°üÀ¨±ê×¼ 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.
VUE