پیاده سازی تابع PBKDF2

۵ سال پیش(به روز شده در ۵ سال پیش) پی اچ پی(PHP)(توابع) ۰

پیکربندی تابع رمزنگاری PBKDF2 مخفف Password-Based Key Derivation Function 2. طول نمک توصیه شده (استاندارد) حداقل 64 بیت است. برای مقدار تعداد تکرار(iteration count) حداقل مقدار 1000 توصیه شده است.

اطلاعات بیشتر در: http://en.wikipedia.org/wiki/PBKDF2

منبع: نامعلوم

/** PBKDF2 Implementation (described in RFC 2898)
 *
 *	@param   string  p   password
 *	@param   string  s   salt
 *	@param   int     c   iteration count (use 1000 or higher)
 *	@param   int     kl  derived key length
 *	@param   string  a   hash algorithm
 *
 *	@return  string  derived key
 */
function pbkdf2( $password, $salt, $count, $keylength, $hash = 'sha256' ) {
    $hl = strlen( hash( $hash, null, true ) ) ; # Hash length
    $kb = ceil( $keylength / $hl ) ; # Key blocks to compute
    $dk = '' ; # Derived key
    # Create key
    for ( $block = 1; $block <= $kb; $block++ ) {
        # Initial hash for this block
        $ib = $h = hash_hmac( $hash, $salt . pack( 'N', $block ), $password, true ) ;
        # Perform block iterations
        for ( $i = 1; $i < $count; $i++ ) # XOR each iterate

            $ib ^= ( $h = hash_hmac( $hash, $h, $password, true ) ) ;
        $dk .= $ib ; # Append iterated block
    }
    # Return derived key of correct length
    return substr( $dk, 0, $keylength ) ;
}
 
//out = þÔ¨¥ÝÂ’ïJ‘¡ê¸Ó;{„ɬq£î
echo pbkdf2( 'password', '%$gfhbqhf^dxjo6GG=G44**-GXGhvmpg8x6g5h6^&W%$25xfghx)fgHaljzFGH', 1000, 24 ) ;

صفحات پیشنهادی

تابع بررسی صحت url...

تابع بررسی صحت یو آر ال. function is_valid_url($url) { return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url); }...

مرتب سازی آرایه های چند بعدی با استفاده از اندیس خاص (sort array)...

تابع زیر آرایه مورد نظر را با توجه به اندیس ورودی مرتب سازی می کند. ورودی اول مربوط به آرایه , ورودی دوم مربوط به اندیس ای است که باید بر اساس آن مرتب سازی صورت گیرد و بخش سوم صعودی یا نزولی بودن ترتی...

توابع رمزگذاری و رمزگشایی یک رشته با خروجی‌های متفاوت...

دو تابع encrypt و decrypt به ترتیب مربوط به رمزگذاری و رمزگشایی می باشند. اما تفاوتی که با حالت معمول دارند این است که خروجی تابع encrypt برای یک مقدار با هر بار فراخوانی متفاوت است. این ویژگی قطعا در...

تابع کنترل اطلاعات ورودی برای جلوگیری از تزریق به پایگاه داده...

ورودی‌ها همیشه باید کنترل شوند تا از خطراتی نظیر SQL Injection در امان بود. یک روش ساده و قوی برای این کار وجود دارد که خود وب سایت PHP آنرا توصیه نموده است. هر چند که شما می ...

نظر

نظری ثبت نشده است.
captcha image reload