Изправен съм пред проблем, който от моя страна няма много описание в документацията на Apple.
Трябва да подпиша NSData с RSA частен ключ, който се предоставя от backoffice. Частният ключ се получава под формата на низ.
Как да постигнете това? Не искам да създавам свои собствени двойки ключове, просто искам да използвам този единствен ЧАСТЕН ключ за подписване на 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 трябва да направи това“ не работят за мен.
Благодаря ти много