1#!/usr/bin/perl -w 2 3# OpenLDAP {APR1} to Apache $apr1$ hash converter 4# (C) 2011 Devin J. Pohly 5# You may use this code freely. It would be nice to be credited. 6 7use MIME::Base64; 8 9while (<>) { 10 ($user, $hash) = split(/:/, $_); 11 unless ($hash =~ /^{APR1}/) { 12 print STDERR "Not an Apache MD5 hash\n"; 13 next; 14 } 15 16 chomp $hash; 17 $hash = decode_base64(substr($hash, 6)); 18 ($hash, $salt) = (substr($hash, 0, 16), substr($hash, 16)); 19 $hash = $hash; 20 $hash =~ s/(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)/$1$7$13$2$8$14$3$9$15$4$10$16$5$11$6\0\0$12/s; 21 $hash = encode_base64($hash); 22 chomp $hash; 23 $hash =~ s/(.)(.)(.)(.)/$4$3$2$1/gs; 24 unless ($hash =~ /AA$/) { 25 #print "Problem with hash\n"; 26 next; 27 } 28 $hash =~ s/AA$//; 29 $hash =~ tr|A-Za-z0-9+/|./0-9A-Za-z|; 30 print "$user:\$apr1\$$salt\$$hash\n" 31}