php设置pem,php – 如何将OpenSSH公钥文件格式转换为PEM

解:

function len($s)

{

$len = strlen($s);

if ($len < 0x80) {

return chr($len);

}

$data = dechex($len);

$data = pack('H*', (strlen($data) & 1 ? '0' : '') . $data);

return chr(strlen($data) | 0x80) . $data;

}

function openssh2pem($file)

{

list(,$data) = explode(' ', trim(file_get_contents($file)), 3);

$data = base64_decode($data);

list(,$alg_len) = unpack('N', substr($data, 0, 4));

$alg = substr($data, 4, $alg_len);

if ($alg !== 'ssh-rsa') {

return FALSE;

}

list(,$e_len) = unpack('N', substr($data, 4 + strlen($alg), 4));

$e = substr($data, 4 + strlen($alg) + 4, $e_len);

list(,$n_len) = unpack('N', substr($data, 4 + strlen($alg) + 4 + strlen($e), 4));

$n = substr($data, 4 + strlen($alg) + 4 + strlen($e) + 4, $n_len);

$algid = pack('H*', '06092a864886f70d0101010500'); // algorithm identifier (id, null)

$algid = pack('Ca*a*', 0x30, len($algid), $algid); // wrap it into sequence

$data = pack('Ca*a*Ca*a*', 0x02, len($n), $n, 0x02, len($e), $e); // numbers

$data = pack('Ca*a*', 0x30, len($data), $data); // wrap it into sequence

$data = "\x00" . $data; // don't know why, but needed

$data = pack('Ca*a*', 0x03, len($data), $data); // wrap it into bitstring

$data = $algid . $data; // prepend algid

$data = pack('Ca*a*', 0x30, len($data), $data); // wrap it into sequence

return "-----BEGIN PUBLIC KEY-----\n" .

chunk_split(base64_encode($data), 64, "\n") .

"-----END PUBLIC KEY-----\n";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值