首页 > 解决方案 > Chilkat 在不知道类型的情况下加载 SSHKey

问题描述

我想知道是否可以在不直接知道类型的情况下通过 Chilkat 库加载 SSHKey。目前我需要做这样的事情:

BOOL success = false;
if([privateKey FromOpenSshPublicKey: privateKeyString])
{
    NSLog(@"key is FromOpenSshPublicKey");
    success = true;
}
else if([privateKey FromPuttyPrivateKey: privateKeyString])
{
    NSLog(@"key is FromPuttyPrivateKey");
    success = true;
}
else if([privateKey FromRfc4716PublicKey: privateKeyString])
{
    NSLog(@"key is FromRfc4716PublicKey");
    success = true;
}

但是,如果我想使用类似LastErrorText.

标签: chilkatchilkat-sshkey

解决方案


这些方法最初是为了加载特定类型的密钥而编写的。实际上,所有方法都会自动识别类型并且仍然会成功加载密钥。例如,您可以使用 PuTTY 私钥调用 FromOpenSshPrivate 密钥,它仍然有效。(您甚至可以将 PEM 传递给它)。

但是...您确实需要知道您是否拥有公钥或私钥。如果您将公钥传递给 FromPrivateKey,则调用将失败。原因是密钥的私有部分根本不存在,如果你想加载一个私钥,那一定是你正在做一些需要私钥的事情。

另一方面,公钥只是完整私钥的一部分。如果你有私钥,根据定义,你也有公钥。(例如,RSA 公钥由模数和指数组成,但 RSA 私钥包含模数、指数和其他部分。如果你有私钥,那么你就有模数和指数,根据定义,你也有公钥。)因此..将私钥传递给加载公钥的方法仍然有效。你只是传递了比必要的更多的东西。


推荐阅读