iOS和Java之间的公钥交换

时间:2014-02-27 10:26:38

标签: java ios rsa public-key commoncrypto

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

Apples libcommonCrypto正在使用的协议在RFC3347中描述,并且是作为ASN.1序列的模数和公共指数。

  

RSA公钥应使用ASN.1类型RSAPublicKey:

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

引自RFC3347,Ver。 2.1,A.1.1