1

我想与基于 Java 的服务器或 Android 设备共享在 iPhone/iPad 上生成的公钥。在 Java 端(服务器或 Android)我想在 iOS 上使用java.securitylibcommonCrypto(SecKeyRef 的东西)。

除了这两个平台之间的公钥交换之外,我已经完成了所有工作。通过使用SecItemCopyMatching,我只能将公钥导出为苹果公司不支持的某种格式。使用 Java,我可以将公钥加载为 X509 证书(通过java.security.X509EncodedKeySpec)或模块和指数(通过java.security.RSAPublicKeySpec)。

现在我需要知道如何将 aSecKeyRef作为 X509 证书导出,或者(我猜这是更简单的解决方案)从中获取模块和指数。我也需要倒退的方式。

SecKeyRef以下是从 a 加载并编码为 BASE64的一些示例公钥:

MIGJAoGBAMYgXP6rvD/Y8F0VQE0HvxpVnnOxXYl5TDlOfW/leyrCLWGWg9Jp+Tl9dYvK/zWgNpoEfFzMVRpUk9UHcIaDWHW3g0BpS2MVC3Vs/0e2eu6S2WMGHpzqcJB51jJRbnqXQ23nVKC2YE520Po3EvFyTr8MlFJqTCJrovgc7fze4RI5AgMBAAE=
4

1 回答 1

1

AppleslibcommonCrypto使用的协议在RFC3347中进行了描述,它是作为 ASN.1 序列的模数和公共指数。

RSA 公钥应该用 ASN.1 类型的 RSAPublicKey 表示:

  RSAPublicKey ::= SEQUENCE {
      modulus           INTEGER,  -- n
      publicExponent    INTEGER   -- e
  }

引用自 RFC3347,版本。2.1、A.1.1

于 2014-03-07T16:00:23.927 回答