2013-04-16 8 views
7

Ho il seguente codice per sun.misc.BASE64Encoder:Come convertire sun.misc.BASE64Encoder a org.apache.commons.codec.binary.Base64

BASE64Decoder decoder = new BASE64Decoder(); 
byte[] saltArray = decoder.decodeBuffer(saltD); 
byte[] ciphertextArray = decoder.decodeBuffer(ciphertext); 

e vorrei convertirlo in org.apache.commons.codec.binary.Base64. Ho esaminato le API, i documenti, ecc., Ma non riesco a trovare qualcosa che sembra corrispondere e fornire gli stessi valori risultanti.

risposta

11

in realtà è quasi la stessa:

Base64 decoder = new Base64(); 
byte[] saltArray = decoder.decode(saltD); 
byte[] ciphertextArray = decoder.decode(ciphertext); 

per la decodifica:

String saltString = encoder.encodeToString(salt); 
String ciphertextString = encoder.encodeToString(ciphertext); 

Quest'ultimo era più difficile perché usi "toStri "alla fine.

+1

Perché sto ricevendo? Il metodo encodeToString (byte []) non è definito per il tipo Base64'? – Danijel

+0

Questo metodo è disponibile solo a partire da commons-codec-1.4 – fabdouglas

6

È possibile utilizzare i metodi decodeBase64(byte[] base64Data) o decodeBase64(String base64String). Per esempio:

byte[] result = Base64.decodeBase64(base64); 

Ecco un breve esempio:

import java.io.IOException; 
import org.apache.commons.codec.binary.Base64; 
import sun.misc.BASE64Encoder; 
import sun.misc.BASE64Decoder; 

public class TestCodec { 

    public static void main(String[] args) throws IOException { 
     String test = "Test BASE64Encoder vs Base64"; 

//  String encoded = new BASE64Encoder().encode(test.getBytes("UTF-8")); 
//  byte[] result = new BASE64Decoder().decodeBuffer(encoded); 

     byte[] encoded = Base64.encodeBase64(test.getBytes("UTF-8")); 
     byte[] result = Base64.decodeBase64(encoded); 

     System.out.println(new String(result, "UTF-8")); 
    } 
} 
+0

E il sale? Questa è una parte fondamentale che non riesco a trovare funzionante. –

+0

@StephaneGrenier è 'saltD' a String? Cosa non funziona ? – tenorsax

2

Invece di queste due classi (import sun.misc.BASE64Encoder, l'importazione sun.misc.BASE64Decoder), è possibile utilizzare java.util.Base64 class.Now cambiamento di codifica e decodifica metodo come di seguito. Per la codifica:

String ciphertextString = Base64.getEncoder().encodeToString(ciphertext); 

Per decodifica:

final byte[] encryptedByteArray = Base64.getDecoder().decode(ciphertext); 

Qui testo cifrato è la password codificata nel metodo di codifica.

Ora tutto è fatto, è possibile salvare il programma ed eseguire. Funzionerà senza mostrare alcun errore.