2011-10-29 200 views
0

我正在開發兩部分的解決方案:第一部分是將基於Android的SMS加密。而第二部分則關注發行和交換公鑰/私鑰。RSA之間的PHP服務器端和Java(Android)客戶端。

一切都很好,直到我面臨這個問題: 如果您使用的是java密碼術類,它提供了生成密鑰對象的mod和密鑰的exp。儘管我從生成密鑰的服務器獲得的所有內容都是預先計算的公鑰。所以,無法從服務器獲取mod或exp,我在哪裏使用phpseclib。

在做了一些研究之後:我帶了三個選項,我需要決定哪一個最好。

1)如果有一種方法可以從phpseclib訪問mod & exp,那麼問題就會以較少的時間解決,對吧?

2)替換java中的本地加密類,與第三方一樣,將採取公鑰的彈性城堡是一個參數。

3)將服務器端語言改爲JSP。那麼,我可以在兩邊使用相同的類。

哪一種解決方案最容易採用..?

非常感謝。

+0

服務器發送的「密鑰」格式是什麼? - 所需的密碼參數將在其中編碼,只需要提取。 – JimmyB

+0

我認爲這是默認的CRYPT_RSA_PUBLIC_FORMAT_PKCS1,在phpseclib文檔中說過。 從服務器輸出等: '----- BEGIN PUBLIC KEY ----- MIGfAoGXCsLnyw64KfYTd4hjhq6sS + 4AhnwgnAm/N/jMEaXtFCMVDfkY48dg5nMcOxjRmuJSK4Qr xDIjCtRyNkBj6nVDjwDGVe4vF5 + s7dkI1lwlfOM2kl/zuuUveeYaT1pSehh2gs2j32deIR8o1zhI 0 + bCebB + YC + mGND5Ro0dgc6z8AFevSEO12Ww9GP1ZFlTuwRAIt0/e3ZrIQIDAQAB ----- END PUBLIC KEY -----' – adel

回答

0

好的,只是看看http://phpseclib.sourceforge.net/documentation/misc_crypt.html#misc_crypt_rsa_format

一個簡單的方法是使用CRYPT_RSA_PRIVATE_FORMAT_XML,在android上做一些XML解析。

編輯:忘記:)

另一個格式 - CRYPT_RSA_PUBLIC_FORMAT_RAW - 被存儲爲一個陣列,兩個索引 - 一個用於模量和一個用於指數。

的getpublickey()有一個可選的參數 - $類型 - 設置格式。

這樣,您應該會收到一個由兩個元素(模數和指數)組成的數組,然後您可以從服務器以任何方式將數據傳輸到客戶端。

+0

謝謝,我知道我應該通過類型$ rsa-> setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_XML);' 我的代碼看起來像這樣'$ rsa = new Crypt_RSA(); $ array = $ rsa-> createKey(1204,60); $ rsa-> setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_XML); extract($ array); echo $ publickey;' 只是沒有得到正確的東西,我得到了舊的格式。 – adel

+0

現在很清楚,只是得到RAW格式的工作,你應該在'createKey()'之前放置'setPublicKeyFomat(CRYPT_RSA_PUBLIC_FORMAT_RAW)'謝謝Hanno :) – adel

+0

很高興我可以幫助:) – JimmyB

1

我回答了我自己的問題,以備將來參考給大家。

1)由phpseclib的作者聯繫,他告訴我

最新的SVN版本增加了以下支持: CRYPT_RSA_PRIVATE_FORMAT_XML CRYPT_RSA_PUBLIC_FORMAT_XML CRYPT_RSA_PRIVATE_FORMAT_PUTTY」

應該解決什麼問題像我的。

2)對於我來說,通過從Java的RSA本地庫生成公鑰和私鑰,然後將其存儲到Web數據庫服務器並使用codeigniter運行,我克服了上述情況(發生在上述響應之前)。您可以爲自己製作一個簡單的API。使用android(java)URLConnection並將URL傳遞給您想要存儲的值,然後將其解析爲另一端。

它可能看起來像這樣: http://localhost/myApp/index.php/AndroidisTalking/registerKeys/VAR1/VAR2 注意VAR1,VAR2是生成的密鑰。

希望它有幫助。並感謝Hanno Bender的大力幫助。

相關問題