#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 содержит модуль, показатель степени плюс другие части. Если у вас есть закрытый ключ, то у вас есть модуль и показатель степени, и по определению у вас также есть открытый ключ.) Таким образом .. передача закрытого ключа методу, который загружает открытый ключ, все равно будет работать. Вы просто передаете больше, чем необходимо.