Chilkat загрузить SSHKey, не зная типа - PullRequest
1 голос
/ 23 апреля 2019

Мне интересно, возможно ли загрузить SSHKey через библиотеку Chilkat без непосредственного знания типа.В настоящее время мне нужно сделать что-то вроде этого:

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.

1 Ответ

1 голос
/ 23 апреля 2019

Методы изначально были написаны для загрузки ключа определенного типа. На самом деле, все методы автоматически распознают тип и все равно успешно загрузят ключ. Например, вы можете вызвать ключ FromOpenSshPrivate с закрытым ключом PuTTY, и он все еще работает. (вы даже можете передать ему PEM).

Однако ... вам нужно знать, есть ли у вас открытый или закрытый ключ. Вызов FromPrivateKey завершится ошибкой, если вы передадите ему открытый ключ. Причина в том, что закрытые части ключа просто отсутствуют, и если вы хотите загрузить закрытый ключ, это должно быть связано с тем, что вы делаете что-то, для чего требуется закрытый ключ.

С другой стороны, открытый ключ - это только часть полного закрытого ключа. Если у вас есть закрытый ключ, по определению у вас также есть открытый ключ. (Например, открытый ключ RSA состоит из модуля и экспоненты, но закрытый ключ RSA содержит модуль, экспоненту и другие части. Если у вас есть закрытый ключ, то у вас есть модуль и экспонента, и по определению у вас также есть открытый ключ.) Таким образом ... передача закрытого ключа в метод, который загружает открытый ключ, все еще будет работать. Вы просто проходите больше, чем нужно.

...