2015-01-15 233 views
0

我是Android新手,我正在開發基於客戶端服務器的應用程序。在這裏我需要使用RSA算法進行加密/解密。將PHP生成的公鑰轉換爲Java公鑰

的情況是: 1.Server必須創建一個私有/公共密鑰對(PHP)和發送公鑰客戶端(Android應用程序) 2,客戶端應該使用公共密鑰來加密數據併發送至服務器 3.現在的服務器必須使用私鑰解密。

在PHP中,我使用'PhpSecLib'來創建密鑰對。

這是編碼:

Server.php:

<?PHP 
include 'Crypt/RSA.php'; 
$rsa = new Crypt_RSA(); 
extract($rsa->createKey(1024)); 
echo $publickey; 
?> 

生成的公鑰:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLz4yAo1FTOLc6nijBCTv5iVnW F6MxCeM5 + RXY + 29AXcpMWhlM9oES3ESIfWw6OzrrENDyqwY + kVzCj2bWYnEAyJXs WOpvqT2XSCPplwZOnQQGm + DnAYJXEeOfgU5DI63fwdiGv4M2 ph1VMMe6684sBZu1 HhJHuhsX2eibBR0/lQIDAQAB

現在在Java中,我成功地收到了這個公鑰並存儲在一個String中。

編碼:

protected String doInBackground(Void... params) 
{ 
    try 
    { 
    URL url=new URL("http://10.0.2.2/Samples/Server.php"); 
    URLConnection con=url.openConnection(); 
    con.setDoOutput(true); 
    BufferedReader ip=new BufferedReader(new InputStreamReader(con.getInputStream())); 
    String tmp,res=""; 

    while((tmp=ip.readLine())!=null) 
    { 
     res+=tmp; 

    } 

    return res; //res contains the public key 


    } 
    catch(Exception e) 
    { 
     return new String("Exception : "+e.getMessage()); 
    } 

} 

我在Java中使用充氣城堡提供商(bcprov-jdk15on-151)。

現在我不知道如何將此字符串轉換爲RSA公鑰。

請提供一些代碼片段?如果代碼需要改進和更正,請糾正它。

謝謝...

回答

1

假設你正確下載你的鑰匙,你可以用你的鑰匙在base 64 encoding產生與後續的代碼java.security.PublicKey

import java.security.KeyFactory; 
import java.security.PublicKey; 
import java.security.spec.X509EncodedKeySpec; 

import javax.crypto.Cipher; 

import org.bouncycastle.jce.provider.BouncyCastleProvider; 
import org.bouncycastle.util.encoders.Base64; 

public class ParseRsaPublicKey { 

    public static void main(String[] args) throws Exception { 
     String yourKeyB64 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLz4yAo1FTOLc6nijBCTv5iVnW\n"+ 
       "F6MxCeM5+RxY+29AXcpMWhlM9oES3ESIfWw6OzrrENDyqwY+kVzCj2bWYnEAyJXs\n"+ 
       "WOpvqT2XSCPplwZOnQQGm+DnAYJXEeOfgU5DI63fwdiGv4M2ph1VMMe6684sBZu1\n"+ 
       "HhJHuhsX2eibBR0/lQIDAQAB"; 
     // create the key factory 
     KeyFactory kFactory = KeyFactory.getInstance("RSA", new BouncyCastleProvider()); 
     // decode base64 of your key 
     byte yourKey[] = Base64.decode(yourKeyB64); 
     // generate the public key 
     X509EncodedKeySpec spec = new X509EncodedKeySpec(yourKey); 
     PublicKey publicKey = (PublicKey) kFactory.generatePublic(spec); 
     // now you can for example cipher some data with your key 
     Cipher cipher = Cipher.getInstance("RSA"); 
     cipher.init(Cipher.ENCRYPT_MODE, publicKey); 
     byte[] cipherData = cipher.doFinal("someData".getBytes()); 
     System.out.println(new String(cipherData)); 
    } 

} 

希望這有助於

+0

謝謝老兄..得到它.. – Jeeva 2015-01-23 10:44:54

+0

@Jeeva歡迎:)如果答案可以幫助你記得接受它:) – albciff 2015-01-23 10:49:48