Я столкнулся с проблемой, которой, с моей стороны, не хватает подробного описания в документации Apple.
Мне нужно подписать NSData закрытым ключом RSA, который предоставляется из бэк-офиса. Закрытый ключ получен в виде строки.
Как этого добиться? Я не хочу создавать свои собственные пары ключей, я просто хочу использовать этот единственный ЧАСТНЫЙ ключ для подписи NSData.
Я нашел несколько решений с использованием OPENSSL, но ни одно из них не работает, и я не могу найти подходящего решения для моей проблемы с собственной библиотекой CommonCrypto.
Фактически, мне нужно воспроизвести фрагмент кода Android:
public static PrivateKey getPrivateKey() throws Exception {
String key = ContentHolder.getInstance(context).getClientPrivateKey();
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(android.util.Base64.decode(key, android.util.Base64.NO_WRAP));
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePrivate(spec);
- возвращает закрытый ключ, который генерируется из строки, хранящейся в базе данных приложения
public String sign(byte[] array) throws SignatureException {
try {
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initSign(privateKey);
sign.update(array);
return android.util.Base64.encodeToString(sign.sign(), android.util.Base64.NO_WRAP);
} catch (Exception ex) {
throw new SignatureException(ex);
}
}
- возвращает массив байтов со знаком в виде строки base64
Как этого добиться в iOS? Я провел много часов в Интернете и пробовал несколько подходов, но ни один из них не увенчался успехом.
Я был бы очень благодарен за любые фрагменты кода, поскольку подсказки типа «CommonCrypto должен сделать это» для меня не работают.
Большое Вам спасибо