php openssh加密,將OpenSSL生成的RSA公鑰轉換爲OpenSSH格式(PHP)

我一直在嘗試使用PHP的openssl擴展生成RSA密鑰對,並將結果保存爲OpenSSH兼容密鑰對 - 意味着私鑰是PEM編碼(很簡單)和公共密鑰存儲在以下形式的OpenSSH的特定格式:將OpenSSL生成的RSA公鑰轉換爲OpenSSH格式(PHP)

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABA...more base64 encoded stuff...

至於我可以收集這些格式包括:

關鍵型清晰文字,後面跟空格(即「openssh-rsa」)

表示以下數據A base64編碼串:(在此情況下7)編碼爲32比特的無符號長大端

算法名稱,在這種情況下「

算法名稱的字節長度SSH- RSA E」

的RSA的長度‘’中的字節數,被編碼爲32位無符號長大端

的RSA‘e’的數量

的RSA的長度‘N’數以字節爲單位的編碼作爲32位無符號長大端編號

RSA'n'編號

我嘗試實施這一使用PHP的包()函數,但無論我怎麼努力的結果絕不會是相當於什麼,我從使用上所產生的同RSA私鑰的ssh-keygen -y -f命令得到OpenSSL的。

這裏是我的代碼的簡化版本:

// generate private key

$privKey = openssl_pkey_new(array(

'private_key_bits' => 1024,

'private_key_type' => OPENSSL_KEYTYPE_RSA

));

// convert public key to OpenSSH format

$keyInfo = openssl_pkey_get_details($privKey);

$data = pack("Na*", 7, 'ssh-rsa');

$data .= pack("Na*", strlen($keyInfo['rsa']['e']), $keyInfo['rsa']['e']);

$data .= pack("Na*", strlen($keyInfo['rsa']['n']), $keyInfo['rsa']['n']);

$pubKey = "ssh-rsa " . base64_encode($data);

echo "PHP generated RSA public key:\n$pubKey\n\n";

// For comparison, generate public key using ssh-keygen

openssl_pkey_export($privKey, $pem);

$umask = umask(0066); // this is needed for ssh-keygen to work properly

file_put_contents('/tmp/ssh-keygen-test', $pem);

umask($umask);

exec('ssh-keygen -y -f /tmp/ssh-keygen-test', $out, $ret);

$otherPubKey = $out[0];

echo "ssh-keygen generated RSA public key:\n$otherPubKey\n\n";

echo ($pubKey == $otherPubKey ? "yes! they are the same\n" : "FAIL! they are different\n");

?>

我如何能做到這一點的任何提示,而不依賴於SSH-凱基?

2011-04-02

shevron

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值