お前ら、この関数をDelphiに移植してください。
おながいします。

sub _md5_crypt
{
  my $pw = shift;
  my $salt = shift;

  my $Magic = MD5_CRYPT_MAGIC_STRING;
  $salt =~ s/^\Q$Magic//;
  $salt =~ s/^(.*)\$.*$/$1/;
  $salt = substr $salt, 0, 8;

  my $ctx = new Digest::MD5;
  $ctx->add($pw);
  $ctx->add($Magic);
  $ctx->add($salt);

  my $final = new Digest::MD5;
  $final->add($pw);
  $final->add($salt);
  $final->add($pw);
  $final = $final->digest;

  for (my $pl = length($pw); $pl > 0; $pl -= 16) {
    $ctx->add(substr($final, 0, $pl > 16 ? 16 : $pl));
  }


  for (my $i = length($pw); $i; $i >>= 1) {
    if ($i & 1) {
      $ctx->add(pack("C", 0));
    } else {
      $ctx->add(substr($pw, 0, 1));
    }
  }