Condividi e archivia RSA - chiave pubblica nel server java e viceversa

1

I miei requisiti sono:

Requisito 1: condividi la chiave pubblica sul server java.

Passi:

  1. Genera chiavi pubbliche-private nell'app per iOS.
  2. Salva le chiavi generate nel portachiavi.
  3. Invia la chiave pubblica generata al server java.
  4. Il server Java deve essere in grado di memorizzare la chiave pubblica condivisa nel database.

Requisito 2: archivia la chiave pubblica inviata dal server java.

Passi:

  1. Il server Java invia la chiave pubblica di un altro utente.
  2. Elabora i dati inviati dal server java e genera la chiave pubblica da esso.
  3. Memorizza la chiave generata nel portachiavi, che può essere successivamente recuperata per crittografare il messaggio da trasferire.

Sono in grado di raggiungere i passaggi 1-2 del requisito 1 utilizzando il metodo descritto di seguito nella classe SecKeyWrapper (esempio CommonCrypto):

- (void)generateKeyPair:(NSUInteger)keySize

Domanda 1: Ora il problema è - come devo inviare quella chiave al server java?

Abbiamo il metodo getPublicKeyBits nella stessa classe, che restituisce un oggetto NSData, su alcuni google ho scoperto che è in formato codificato DER.

Domanda 2: Se invio lo stesso oggetto NSData al server, che suppongo interpreterà come oggetto ByteBuffer, sarà possibile per altri dispositivi, nel mio caso potrebbe essere Android, per interpretare quei dati?

Domanda 3: Qual è il modo migliore per condividere la chiave pubblica negli scenari sopra riportati?

    
posta Devarshi 13.05.2014 - 12:21
fonte

2 risposte

1

I server Java e le app Android si aspettano la chiave pubblica nel formato X.509, vedi link su come convertire.

    
risposta data 25.04.2015 - 09:52
fonte
0

Dovresti:
  * Usa netty.io per l'invio di dati
  * Utilizzare un meccanismo di serializzazione e de-serializzazione utilizzando ByteArrayStreams e ObjectStreams
  * Utilizza una sorta di crittografia come l'utilizzo di AES con una passphrase

netty.io:   Come ha detto lo screencast, ma modificare i gestori in base alle proprie esigenze, utilizzare ByteEncoder e ByteDecoders.    link
Serializzazione:
  Encoder:
public static byte[] serialize(T object) throws IOException { ByteArrayOutputStream bOutputStream; ObjectOutputStream objectOutputStream; bOutputStream = new ByteArrayOutputStream(); objectOutputStream = new ObjectOutputStream(bOutputStream); objectOutputStream.writeObject(object); objectOutputStream.flush(); byte[] bytes = bOutputStream.toByteArray(); bOutputStream.close(); objectOutputStream.close(); return bytes; }

Decoder:
@SuppressWarnings("unchecked") public static T deserialize(byte[] bytes) throws ClassCastException,IOException, ReflectiveOperationException { T obj; ByteArrayInputStream bInputStream; ObjectInputStream objectInputStream; bInputStream = new ByteArrayInputStream(bytes); objectInputStream = new ObjectInputStream(bInputStream); obj = (T) objectInputStream.readObject(); bInputStream.close(); objectInputStream.close(); return obj; }

AES:   È come due classi, ma è abbastanza facile. Puoi cercarlo su overflow dello stack o qualcosa di

Memorizzare:
Map < Integer, PublicKey> o qualsiasi altra cosa dovrebbe fare il trucco.

    
risposta data 18.03.2017 - 07:33
fonte

Leggi altre domande sui tag