Crypt_RSA_KeyPairでfromPEMStringが動かない

2007.06.13 / php

PHPで公開鍵暗号を利用する場合、PEARのCrypt_RSAが利用できます。

このCrypt_RSAで、KeyPairをPEM形式の文字列から生成するためにCrypt_RSA_KeyPair::fromPEMString($pem) な関数があるのですが、手元の環境では動きませんでした。原因はundefinedな配列を操作しているみたいで。と、いうわけで以下、修正方法。

Crypt/RSA/KeyPair.phpの235行目に

$len |= ord($in[$pos++]);

な箇所がありますが、これを

$len |= ord($str[$pos++]);

にすればOKです。これで、次にように確認できるはず。

  $key_pair = new Crypt_RSA_KeyPair(1024);
  echo("[PubKey]" . $key_pair->getPublicKey()->toString() . "\n");
  echo("[PriKey]" . $key_pair->getPrivateKey()->toString(). "\n");
  
  $pem = $key_pair->toPEMString();
  echo("[PEM]" . $pem);
  
  $new_key_pair = Crypt_RSA_KeyPair::fromPEMString($pem);
  echo("[PubKey]" . $new_key_pair->getPublicKey()->toString() . "\n");
  echo("[PriKey]" . $new_key_pair->getPrivateKey()->toString(). "\n");
  

それにしても、$inな配列なんてどこにも出てきてないのに、βとはいえ、よくこれでリリースしてるなぁ。。。