2014-02-27 70 views
1

我想與基於Java的服務器或Android設備共享在iPhone/iPad上生成的公鑰。在Java端(服務器或Android),我想在iOS上使用java.securitylibcommonCrypto(SecKeyRef的東西)。iOS和Java之間的公鑰交換

我已經得到了一切工作,除了這兩個平臺之間的公鑰交換。通過使用SecItemCopyMatching我只能將公鑰導出爲某種格式,然後是Apple所不支持的任何格式。使用Java,我可以將公鑰作爲X509證書(通過java.security.X509EncodedKeySpec)或作爲模塊和指數(通過java.security.RSAPublicKeySpec)加載。

現在我需要知道如何導出SecKeyRef作爲X509證書或(我猜是更簡單的解決方案)從中獲取模塊和指數。而且我也需要倒退。

這裏是從SecKeyRef加載並編碼以BASE64一些樣品公鑰:

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

回答

1

協議蘋果libcommonCrypto使用在RFC3347描述並且是模數和公共指數爲ASN.1序列。

RSA公鑰應該用ASN.1類型RSAPublicKey來表示:從RFC3347,版本

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

報價。 2.1,A.1.1