2

我正在尝试使用 OPENSSL 实现 rsa 加密和解密。请查看下面给出的代码,如果有任何问题,请告诉我。

<?php
function pr($val){
echo '<pre>'; 
print_r($val);
echo '</pre>';
}

function strtohex($string)
{
  $string = str_split($string);
  foreach($string as &$char)
    $char = dechex(ord($char));
  return implode('',$string);
}

$res=openssl_pkey_new(array('digest_alg' => 'sha1', 'private_key_type' =>         OPENSSL_KEYTYPE_RSA, 'private_key_bits' => 1024));

// Get private key
openssl_pkey_export($res, $privkey);
$data='test';
echo 'prvt<br/>'.$privkey.'<br/> ends<br/><br/>';
// Get public key
$pubkey=openssl_pkey_get_details($res);

pr($pubkey["key"]);
echo 'prvt<br/><br/>';
//var_dump($pubkey["rsa"][""]);
pr($pubkey["rsa"]);
echo 'prvt<br/><br/>';
$n=strtohex($pubkey["rsa"]["n"]);
echo 'n<br/><br/>';
pr($n);
echo 'e<br/><br/>';
$e=$pubkey["rsa"]["e"];
pr($e);
//$binarydata = pack($pubkey["rsa"]["e"], 0x1234, 0x5678, 65, 66);
//pr($binarydata);
echo 'd<br/><br/>';
$d=strtohex($pubkey["rsa"]["d"]);
pr($d);
echo 'p<br/><br/>';
$p=strtohex($pubkey["rsa"]["p"]);
pr($p);
echo 'q<br/><br/>';
//var_dump($pubkey["rsa"]["q"]);
$q=strtohex($pubkey["rsa"]["q"]);
pr($q);

echo 'dmp1<br/><br/>';
//pr($pubkey["rsa"]["dmp1"]);
$dmp1=strtohex($pubkey["rsa"]["dmp1"]);
pr($dmp1);

echo 'dmq1<br/><br/>';
//pr($pubkey["rsa"]["dmq1"]);
$dmq1=strtohex($pubkey["rsa"]["dmq1"]);
pr($dmp1);

echo 'iqmp<br/><br/>';
//pr($pubkey["rsa"]["iqmp"]);
$iqmp=strtohex($pubkey["rsa"]["iqmp"]);
pr($iqmp);

?>

这里我没有得到索引 $pubkey["rsa"]["e"] 的值。任何帮助,将不胜感激...

提前谢谢...

4

1 回答 1

1

我会使用 phpseclib,一个纯 PHP RSA 实现。例如。

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
$rsa->loadKey('...');

$privatekey = $rsa->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_RAW);
于 2012-09-25T19:27:37.360 回答