Chilkat загружает SSHKey, не зная типа

#chilkat #chilkat-sshkey

#chilkat #chilkat-sshkey

Вопрос:

Мне интересно, возможно ли загрузить 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:

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

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

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