Password di LDAP dilambangkan dalam atribut userPassword dan umumnya diisi dengan nilai plain text. Maksudnya plain text di sini ya teks polos dan tidak dienksripsi. Sejauh ini, LDAP menyediakan enkripsi password dalam bentuk MD5, SMD5, SHA, dan SASL.

Contoh, kita mau migrasi data di tabel user dari MySQL ke LDAP. Di tabel tersebut berisi kolom password dengan enkripsi MD5. Misal, passwordnya adalah testing maka nilainya dalam bentuk MD5 menjadi ae2b1fca515949e5d54fb22b8ed95575.

Bila dikonversi ke LDAP maka nilai userPassword adalah {MD5}risfylFZSeXVT7IrjtlVdQ==.

Di sebelah kanan karakter {MD5} adalah nilai MD5 yang diubah menjadi format hex 16 karakter.

Bila diperhatikan kembali nilai dari password testing di MD5 MySQL formatnya adalah hex dengan panjang 32 karakter.

Pertanyaannya, bagaimana cara saya mengubah nilai password MD5 milik user yang ada di MySQL ke dalam LDAP?

Pertama, mengubah nilai MD5 password yang formatnya hex ke dalam binary dengan fungsi hex2bin() milik PHP.

1
2
3
4
5
<?php
$str = 'ae2b1fca515949e5d54fb22b8ed95575';
echo hex2bin($str);
echo "\n";
// Hasilnya: ?+?QYI??O?+??Uu

Berikutnya, dari binary tersebut kita ubah ke bentuk base64 yang diencode dengan fungsi base64_encode().

1
2
3
4
5
6
<?php
// Sambungan dari hex2bin tadi.
$encode = base64_encode(hex2bin($str));
echo $encode;
echo "\n";
// Hasilnya: risfylFZSeXVT7IrjtlVdQ==

Hasilnya sama kan? Tinggal concat aja {MD5} dengan hasil yang diencode. Masalah selesai! :)

Referensi