1

我正面临一个问题,从我的角度来看,Apples 文档中没有很多描述。

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

非常感谢

4

1 回答 1

0

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

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

于 2015-01-14T17:18:12.610 回答