我想与基于Java的服务器或Android设备共享在iPhone / iPad上生成的公钥。在Java端(服务器或Android),我想在iOS上使用java.security
和libcommonCrypto
(SecKeyRef的东西)。
除了这两个平台之间的公钥交换外,我已经完成了所有工作。通过使用SecItemCopyMatching
,我只能将公钥导出为Apple不支持的任何其他格式。使用Java,我可以将公钥加载为X509证书(通过java.security.X509EncodedKeySpec
)或作为模块和指数(通过java.security.RSAPublicKeySpec
)。
现在我需要知道如何将SecKeyRef
导出为X509证书或(我猜是更简单的解决方案)从中获取模块和指数。我也需要倒退的方式。
以下是从SecKeyRef
加载并编码为BASE64的一些示例公钥:
MIGJAoGBAMYgXP6rvD/Y8F0VQE0HvxpVnnOxXYl5TDlOfW/leyrCLWGWg9Jp+Tl9dYvK/zWgNpoEfFzMVRpUk9UHcIaDWHW3g0BpS2MVC3Vs/0e2eu6S2WMGHpzqcJB51jJRbnqXQ23nVKC2YE520Po3EvFyTr8MlFJqTCJrovgc7fze4RI5AgMBAAE=
答案 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