RSAの暗号キーをたくさん作る必要があって、phpで書いてみました。あまり新しさはありません。下記は、100ペア作ります。最後に、作成したキーを、XMLで書き出します。
<?php
require_once 'Crypt/RSA.php';
//Generates the pair keys
function generate_key_pair()
{
global $public_key,$private_key;
$key_pair = new Crypt_RSA_KeyPair(1024);
// $key_pair->generate(1024);
//Returns public key from the pair
$public_key = $key_pair->getPublicKey();
//Returns private key from the pair
$private_key = $key_pair->getPrivateKey();
}
//Check runtime errors
function check_error(&$obj)
{
if ($obj->isError()){
$error = $obj->getLastError();
switch ($error->getCode()) {
case CRYPT_RSA_ERROR_WRONG_TAIL :
// nothing to do
break;
default:
// echo error message and exit
echo 'error: ', $error->getMessage();
exit;
}
}
}
$xmlstr = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<root>\n\n";
$total = 100;
for ($i = 0; $i < $total; $i++) {
$xmlstr = $xmlstr."<key>\n<number>$i</number>\n<public>";
generate_key_pair();
//get string represenation of the public key
$key = Crypt_RSA_Key::fromString($public_key->toString());
check_error($key);
$xmlstr = $xmlstr.$public_key->toString()."</public>\n<private>";
//Get string represenation of the private key
$key2 = Crypt_RSA_Key::fromString($private_key->toString());
check_error($key2);
$xmlstr = $xmlstr.$private_key->toString()."</private>\n</key>\n\n";
}
$xmlstr = $xmlstr."</root>\n";
//echo $xmlstr."\n";
$key_file = @fopen('key.txt','w');
$tmp = fwrite($key_file,$xmlstr);
@fclose(key_file);
?>
書き出したキーを見てみたら、最初の20文字ぐらいは同じでした(ちょっと驚きます)。もう一度実行して、再度キーを作ったら、別なキーを作成していました。きちんとランダムに作成しているようです。
公開鍵と秘密鍵のペアを探すコードも書きました。
<?php
$file = 'key.txt';
$keytxt = file_get_contents($file);
$keyxml = simplexml_load_string($keytxt);
$target_key = 'YTozOntpOjA7czoxMjg6IksoxLghImuW+UMssDbhDahFco801bKIfcOMfhTIKn/FoIdZLnoXc7e63oAFu25Cy4io9HEw6MCteonOc+fpjWTi6KQB/oDyAm23cHml3IAQpn92otOVZ0tuWCNszqpCY1/A3xXBHJ8pEZfQCw8Y1ORb1ovcd98aAjFAUsi+E9+QIjtpOjE7czo2NDoiRQA7NvHr5uGcl1JNSAM++TPp497ZlI+KRUB7NjEs5+Gcl1JNSAP+uDMo493Yk45JRH86NTAr5uDb1pGMh0L9dyI7aToyO3M6NjoicHVibGljIjt9';
for ($i = 0; $i < $keyxml->key->count(); $i++) {
if ($keyxml->key[$i]->public == $target_key) {
echo $keyxml->key[$i]->number."\n";
}
}
?>
こんな長い文字列の一致を調べる時のcpu負荷は、どれぐらいのものでしょうか?時間はほぼゼロなのですが。