使用RSA私钥对NSData进行签名

时间:2014-10-22 13:40:31

标签: ios objective-c openssl private-key commoncrypto

我正面临一个问题,在我的方面,苹果文档中缺少很多描述。

我需要使用后台提供的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应该这样做”的提示对我不起作用。

非常感谢

1 个答案:

答案 0 :(得分:0)

主要问题是Apple正式不支持使用字符串键(https://devforums.apple.com/message/641836#641836)进行签名。他们坚持使用.p12并使用SecPKCS12Import导入它。

检查此答案https://stackoverflow.com/a/27945240/4324866