Конвертировать сгенерированный PHP открытый ключ в открытый ключ Java

Я новичок в Android, и я работаю над клиент-серверным приложением. Здесь мне нужно использовать алгоритм RSA для шифрования / дешифрования.

Сценарий таков:
1.Сервер должен создать пару приватный / открытый ключ (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 + гх + 29AXcpMWhlM9oES3ESIfWw6OzrrENDyqwY + kVzCj2bWYnEAyJXs
WOpvqT2XSCPplwZOnQQGm + DnAYJXEeOfgU5DI63fwdiGv4M2ph1VMMe6684sBZu1
HhJHuhsX2eibBR0 / lQIDAQAB

Теперь в Java я успешно получил этот открытый ключ и сохранил его в строке.

Кодирование:

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());
}

}

я использую Поставщик надувных замков (bcprov-jdk15on-151) в Яве.

Теперь я понятия не имею, как преобразовать эту строку в открытый ключ RSA.

Просьба предложить некоторые фрагменты кода? и если код нуждается в улучшениях и исправлениях, пожалуйста, исправьте это.

Спасибо…

0

Решение

Если вы правильно загрузили свой ключ, вы можете использовать его в 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));
}

}

Надеюсь это поможет,

1

Другие решения

Других решений пока нет …