如何将 base64 导出的公钥转换为我可以在 php 中使用的公钥


How do I convert a base64 exported public key into something I can use in php?

我可以导出iOS中生成的公钥并将其转换为base64:

var dataPtr:Unmanaged<AnyObject>?
let query: [String:AnyObject] = [
    kSecClass: kSecClassKey,
    kSecAttrApplicationTag: "com.example.site.public",
    kSecReturnData: kCFBooleanTrue
]
let qResult = SecItemCopyMatching(query, &dataPtr)
// error handling with `qResult` ...
let publicKeyData = dataPtr!.takeRetainedValue() as NSData
// convert to Base64 string
let base64PublicKey = publicKeyData.base64EncodedStringWithOptions(nil)

我还能够将其发送到我的 LAMP 服务器。现在我正在尝试弄清楚如何将其用作那里的公钥。

我试过了:

$keydata = base64decode($_GET['base64PublicKey']);
$res = gnupg_init();
$info = gnupg_import($res,$keydata);
print_r($info);

这是正确的方向吗?我知道数据的大小是 270,与密钥的块大小不同。我对PKI有点陌生,任何帮助将不胜感激。

如果你的 pub 密钥符合 X.509 标准,你可以像这样使用 PHP 解析:

$keydata = base64decode($_GET['base64PublicKey']);
$info = openssl_x509_parse($keydata,true);
print_r($info);

PHP 包含一个用于 OpenSSl 和 X.509 的库