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.