info > Crypt::KeyDerivation

📖 NAME

Crypt::KeyDerivation - PBKDF1, PBKDF2 and HKDF key derivation functions

🚀 Quick Reference

Use CaseCommandDescription
🔑 PBKDF1 key derivationpbkdf1($password, $salt, $iter, $hash, $len)Derive key using PBKDF1 (PKCS#5 v2.0) – use with caution
🔐 PBKDF2 key derivationpbkdf2($password, $salt, $iter, $hash, $len)Derive key using PBKDF2 (PKCS#5 v2.0) – recommended
🔑 HKDF key derivationhkdf($password, $salt, $hash, $len, $info)Derive key using HKDF (RFC 5869)
🔑 HKDF extracthkdf_extract($password, $salt, $hash)Extract pseudorandom key from input keying material
🔑 HKDF expandhkdf_expand($prk, $hash, $len, $info)Expand pseudorandom key to desired length

📋 SYNOPSIS

use Crypt::KeyDerivation ':all';

### PBKDF1/2
$derived_key1 = pbkdf1($password, $salt, $iteration_count, $hash_name, $len);
$derived_key2 = pbkdf2($password, $salt, $iteration_count, $hash_name, $len);

### HKDF & co.
$derived_key3 = hkdf($keying_material, $salt, $hash_name, $len, $info);
$prk  = hkdf_extract($keying_material, $salt, $hash_name);
$okm1 = hkdf_expand($prk, $hash_name, $len, $info);

📝 DESCRIPTION

Provides an interface to Key derivation functions:

🔧 FUNCTIONS

âš ī¸ pbkdf1

BEWARE: if you are not sure, do not use pbkdf1 but rather choose pbkdf2.

$derived_key = pbkdf1($password, $salt, $iteration_count, $hash_name, $len);
#or
$derived_key = pbkdf1($password, $salt, $iteration_count, $hash_name);
#or
$derived_key = pbkdf1($password, $salt, $iteration_count);
#or
$derived_key = pbkdf1($password, $salt);

# $password ......... 🔑 input keying material (password)
# $salt ............. 🧂 salt/nonce (expected length: 8)
# $iteration_count .. 🔄 optional, DEFAULT: 5000
# $hash_name ........ 🔐 optional, DEFAULT: 'SHA256'
# $len .............. 📏 optional, derived key len, DEFAULT: 32

🔐 pbkdf2

$derived_key = pbkdf2($password, $salt, $iteration_count, $hash_name, $len);
#or
$derived_key = pbkdf2($password, $salt, $iteration_count, $hash_name);
#or
$derived_key = pbkdf2($password, $salt, $iteration_count);
#or
$derived_key = pbkdf2($password, $salt);

# $password ......... 🔑 input keying material (password)
# $salt ............. 🧂 salt/nonce
# $iteration_count .. 🔄 optional, DEFAULT: 5000
# $hash_name ........ 🔐 optional, DEFAULT: 'SHA256'
# $len .............. 📏 optional, derived key len, DEFAULT: 32

🔑 hkdf

$okm2 = hkdf($password, $salt, $hash_name, $len, $info);
#or
$okm2 = hkdf($password, $salt, $hash_name, $len);
#or
$okm2 = hkdf($password, $salt, $hash_name);
#or
$okm2 = hkdf($password, $salt);

# $password ... 🔑 input keying material (password)
# $salt ....... 🧂 salt/nonce, if undef defaults to HashLen zero octets
# $hash_name .. 🔐 optional, DEFAULT: 'SHA256'
# $len ........ 📏 optional, derived key len, DEFAULT: 32
# $info ....... â„šī¸ optional context and application specific information, DEFAULT: ''

🔑 hkdf_extract

$prk  = hkdf_extract($password, $salt, $hash_name);
#or
$prk  = hkdf_extract($password, $salt, $hash_name);

# $password ... 🔑 input keying material (password)
# $salt ....... 🧂 salt/nonce, if undef defaults to HashLen zero octets
# $hash_name .. 🔐 optional, DEFAULT: 'SHA256'

🔑 hkdf_expand

$okm = hkdf_expand($pseudokey, $hash_name, $len, $info);
#or
$okm = hkdf_expand($pseudokey, $hash_name, $len);
#or
$okm = hkdf_expand($pseudokey, $hash_name);
#or
$okm = hkdf_expand($pseudokey);

# $pseudokey .. 🔑 input keying material
# $hash_name .. 🔐 optional, DEFAULT: 'SHA256'
# $len ........ 📏 optional, derived key len, DEFAULT: 32
# $info ....... â„šī¸ optional context and application specific information, DEFAULT: ''

perl v5.34.0 2022-02-06 Crypt::KeyDerivation(3pm)

Crypt::KeyDerivation
📖 NAME 🚀 Quick Reference 📋 SYNOPSIS 📝 DESCRIPTION 🔧 FUNCTIONS
âš ī¸ pbkdf1 🔐 pbkdf2 🔑 hkdf 🔑 hkdf_extract 🔑 hkdf_expand

Generated by phpman v4.9.26-5-g7740029 Author: Che Dong Under GNU General Public License
2026-08-24 06:18 @216.73.216.102
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 Transitional!Valid CSS!