我正面临一个问题,在我的方面,苹果文档中缺少很多描述。
我需要使用后台提供的RSA私钥对NSData进行签名。私钥以字符串的形式接收。
如何实现这一目标?我不想创建自己的密钥对,我只想使用该单个PRIVATE密钥对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应该这样做”的提示对我不起作用。
非常感谢
答案 0 :(得分:0)
主要问题是Apple正式不支持使用字符串键(https://devforums.apple.com/message/641836#641836)进行签名。他们坚持使用.p12并使用SecPKCS12Import导入它。