Algoritmo di crittografia / decrittografia generico su JRE (Sun / IBM)

1

Esiste un algoritmo di crittografia generico su tutte le piattaforme? RSA è generico su SUN / IBM JRE?

Un'altra domanda: base64Encoder / base64Decoder sun.misc.BASE64Decode / sun.misc.BASE64Encoder si comportano allo stesso modo in IBM JRE?

Ci sono anche differenze nell'utilizzo di questo algoritmo nei JRE a 32 bit / 64 bit? Se sì, allora come affrontarli?

    
posta R23 28.05.2015 - 09:30
fonte

2 risposte

6

La documentazione del nome standard di Java Cryptography Architecture (JCE) contiene un sezione sui requisiti di implementazione . Per Java 7 e Java 8 contiene le seguenti voci per Cipher rispetto a RSA:

RSA/ECB/PKCS1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)

per assicurarti di aver ottenuto quello giusto, specifica la stringa completa (escludendo ovviamente le dimensioni delle chiavi all'interno delle parentesi). Quindi sarebbe "RSA/ECB/OAEPWithSHA-1AndMGF1Padding" per il riempimento OAEP.

RSA è un insieme di algoritmi standardizzati a livello internazionale (definiti negli standard PKCS # 1 e RFC derivati da tali standard). Le implementazioni dovrebbero confermare i vettori di test per qualsiasi piattaforma. RSA ad esempio usa la codifica big endian, anche su piattaforme little endian.

Il Base64Encoder è una classe interna di Sun. Potrebbe anche essere incoerente tra le implementazioni e potrebbe scomparire senza preavviso. Sfortunatamente viene usato molto, quindi Oracle e altri potrebbero decidere di lasciarlo sul posto, per ogni evenienza. Non dovresti mai usare mai le classi interne di Sun. Molti validatori di codici statici e persino IDE lo contrassegnano come un errore.

Per i runtime compatibili con Java 8 dovresti usare il Base64 classe. Per le versioni precedenti dovresti usare una libreria. Spesso viene utilizzato il Apache Commons Codec . Google Guava è molto usato e ha anche un set di codec.

Base 64 è in circolazione da molto tempo. Non dovrebbe funzionare diversamente su 32 bit o 64 bit su qualsiasi piattaforma, a patto che tu sia sicuro di utilizzare la stessa codifica dei caratteri. La codifica UTF-8 - compatibile con US ASCII per la base 64 - dovrebbe essere preferita.

Infine ci sono le librerie Java Bouncy Castle e il fornitore. Le librerie di Bouncy Castle contengono una quantità sempre crescente di funzionalità crittografiche che possono essere utilizzate su qualsiasi runtime Java. Il provider viene utilizzato per consentire a gran parte di questa funzionalità di essere utilizzata tramite Java JCA / JCE. E ovviamente contiene anche un Base64 classe nell'API "leggera".

Finché si utilizza correttamente l'API Java è completamente compatibile con processori a 32 e 64 bit, big endian o little endian. Non dovrebbe nemmeno importare se usi Linux, Windows, MacOS. Anche Android dovrebbe essere compatibile, sebbene sia non una distribuzione ufficiale di Java.

    
risposta data 28.05.2015 - 10:57
fonte
0

Informazioni sul codificatore base64: non dovresti usare i pacchetti sun.misc che non fanno parte dell'API ufficiale, quindi potrebbe essere possibile che queste classi non siano disponibili in altre macchine virtuali.

Utilizza il decodificatore base64 di org.apache.

RSA è uno standard / algoritmo di crittografia, quindi con le chiavi dei diritti devi crittografare / decifrare tra le VM.

    
risposta data 28.05.2015 - 09:34
fonte

Leggi altre domande sui tag