Conversione da byte [] a tipo definito dall'utente

0

Sto lavorando su un simulatore di rete progettato in java con la funzione di base dei messaggi di routing attraverso una rete. Sto cercando di prendere un oggetto Message, crittografarlo utilizzando un'utilità di crittografia che restituisce l'output come byte [] e quindi necessario per continuare a eseguire la funzione di routing attraverso la rete. La parte di routing fa uso di un host di metodi predefiniti che accettano il tipo di messaggio come argomento. Il problema che sto affrontando è la conversione dall'output di byte [] a questo tipo di messaggio. Ho provato un paio di cose.

Per prima cosa ho provato a serializzare l'oggetto, a crittografarlo e quindi ho provato a de-serializzare l'output e a scriverlo nel tipo Message. Non ha funzionato in quanto ha fornito un'intestazione di flusso non valida.

In secondo luogo, ho provato a creare una sottoclasse EncryptedMessage che estenda il Messaggio. Ho provato a trasmettere l'output dell'utilità di crittografia come tipo EncryptedMessage anche non ha funzionato- ha dato lo stesso errore. Ho capito che mentre serializzare questo non può essere fatto.

Ho dichiarato un dato variabile di tipo byte [] in EncryptedMessage e ho provato ad assegnare l'output byte [] a questo, ma non ha funzionato perché alla fine avrei dovuto ottenere l'output solo come Messaggio.

Esiste un modo semplice per convertire l'output di byte [] in type Message in modo che possa essere usato ulteriormente per chiamare tutte le funzioni dei metodi ecc.

    
posta Hashtag 16.04.2015 - 09:24
fonte

1 risposta

1

Dipende interamente da come funziona il tuo metodo di crittografia. C'è un pozzo -un modo noto di serializzare e deserializzare un'istanza di classe in java nella sua forma in byte, tuttavia non dovresti confonderlo con la crittografia. La crittografia sarebbe un'operazione da eseguire sull'array di byte stesso per trasformarlo in qualcosa di difficile da invertire senza una chiave appropriata di qualche tipo. In questo caso, recuperare il messaggio originale è semplicemente una questione di invertire la crittografia e quindi reinterpretare i byte come istanza di classe originale.

Ora se hai un messaggio hashing in un array di byte, scoprirai che non sarai mai in grado di recuperare il messaggio originale. Questo viene fatto intenzionalmente, e in effetti non è pensato per crittografare, ma piuttosto per verificare la validità dei dati sensibili senza dover necessariamente tenere quei dati sensibili in memoria. Ad esempio, se si desidera assicurarsi che la password inserita sia corretta, è possibile eseguire l'hash della password e controllarla con altre password hash nel database. Puoi sapere se la password è corretta senza dover salvare le password sul database.

Altrimenti, mi aspetterei che tu disponga di un metodo di crittografia (AES, TKIP, WPA2 per esempio) e che il metodo di crittografia richieda molto probabilmente una sorta di input da parte tua. Questa è una chiave privata e quando decifri i byte, devi fornire la stessa chiave privata per recuperare il valore originale. Dovresti considerare l'ulteriore complicazione che in Java non puoi creare un'istanza di un tipo che non si trova in classpath, quindi probabilmente dovrai fornire anche il nome della classe o l'interfaccia.

Il metodo di crittografia più sofisticato è crittografia a chiave pubblica in cui entrambe le estremità hanno una chiave pubblica e privata. La combinazione della chiave pubblica e della chiave privata fornisce la chiave segreta condivisa richiesta per crittografare e decrittografare da e verso gli array di byte. Tuttavia, come per il metodo precedente, è necessario fornire anche la classe Message o l'interfaccia per decifrare, ovvero entrambe le parti devono avere Message in classpath.

    
risposta data 16.04.2015 - 09:47
fonte

Leggi altre domande sui tag