MD5 MySQL to LDAP

Di LDAP, password dilambangkan dalam kode userPassword dan umumnya diisi dengan nilai plain text. Maksudnya plain text di sini ya teks yang polos dan tidak ada enksripsi atau hash apapun. Untungnya LDAP menyediakan skema password antara lain MD5, SMD5, SHA, dan SASL.

Misalnya, kita mau migrasi data di sebuah tabel user kita dari MySQL ke LDAP. Di tabel user tersebut berisikan kolom password yang nilainya sudah dalam bentuk enkripsi MD5. Misalnya passwordnya adalah testing berarti nilainya dalam bentuk MD5 menjadi ae2b1fca515949e5d54fb22b8ed95575.

Kalau di LDAP skema userPassword MD5 nilainya adalah {MD5}risfylFZSeXVT7IrjtlVdQ==. Di sebelah kanan {MD5} itu adalah fungsi dari base64_encode yang membungkus nilai dari MD5 yang formatnya binary (16 karater). Nah kalau, diperhatikan kembali nilai dari password testing di MD5 MySQL formatnya adalah hex yang panjangnya 32 karakter.

Pertanyaannya sekarang bagaimana cara saya mengubah nilai password MD5 milik user yang ada di MySQL ke dalam LDAP? Saya ingin mempertahankan skema password MD5 di LDAP dan tidak ingin meminta user untuk mereset password saat dipindahkan ke LDAP.

Langkah pertama, mengubah nilai MD5 password yang formatnya hex ke dalam binary. Untungnya, PHP menyediakan fungsi hex2bin(). Jadi tinggal masukkan saja nilai tersebut ke dalam fungsi tersebut.

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

Hasilnya memang aneh karena tugas kita ya mengubah hex tadi ke dalam binary. Berikutnya dari binary tersebut kita ubah dalam bentuk base64 yang diencode. Untungnya PHP menyediakan fungsi base64_encode(). Jadi, hasilnya seperti di bawah.

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

Oh iya, kalau mau coba editor online kodingan PHP bisa coba di WTools Sandbox - PHP.

Hasilnya sama kan? Tinggal concat aja {MD5} dengan hasil yang diencode. Masalah selesai dan semoga berjalan lancar. :)

Referensi