Alguem ja mexeu com Base64?? assim consegui gerar a criptografia de um pdf , até ai beleza, mas o cliente tem um programa em delphi que gera criptografica do mesmo pdf para base64 e a minha criptografia e a criptografia do delphi saem diferente…to pensando que pode ser a classe que eu to usando …
Alguem ja passou por isso? sabe algo a respeito de cada linguagem gerar uma criptografia num padrão diferente??
Olá guilhermetn3 ,
Você tem como conseguir os códigos do base64 que ele utilizou no Delphi?
Acho que seria interessante colocar eles lado a lado com a sua implementação para ver se não tem nenhuma chave diferente ou algo assim.
aham , ja pedi para ele isso , como é um software desenvolvido em parceria , eles vão mandar os fontes sem problema , e pedi tbem se eles tão usando um pacote nativo ou externo do Delphi para gerar a criptografia, se for nativo dae acho que to fu… mas se for externo talvez consiga algo igual em java…
Olha cara eu fiz um trabalho sobre criptografia na facul e peguei um código mais ou menos assim na net (não lembro aonde), dizem que Base64.
Boa Sorte!
import javax.crypto.*;
import javax.crypto.spec.*;
import javax.swing.JOptionPane;
import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64DecoderStream;
import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64EncoderStream;
import java.security.spec.KeySpec;
public final class Base64 {
private static SecretKey skey;
private static KeySpec ks;
private static PBEParameterSpec ps = new PBEParameterSpec (
new byte[]{3,1,4,1,5,9,2,6}, 20);
private static final String algorithm = "PBEWithMD5AndDES";
private static SecretKeyFactory skf;
static{
try{
skf = SecretKeyFactory.getInstance(algorithm);
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e.getMessage());
}
}
public static final byte[] desencriptar(final byte[] b, final String senha)
throws Exception{
ks = new PBEKeySpec (senha.toCharArray());
skey = skf.generateSecret (ks);
final Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.DECRYPT_MODE, skey, ps);
return BASE64DecoderStream.decode(cipher.doFinal(b));
}
public static final byte[] encriptar(final byte[] b, final String senha)
throws Exception{
ks = new PBEKeySpec (senha.toCharArray());
skey = skf.generateSecret (ks);
final Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE, skey, ps);
return cipher.doFinal(BASE64EncoderStream.encode(b));
}
}
O problema certamente pode estar com o conjunto de caracteres utilizados no java e no Delphi.
Lembrando que o Delphi utiliza a página de código padrão do windows e o java utf.
Você poderia converter as Strings do java para o encodding correspondente ou tentar o inverso.
O base 64 normalmente é formado pelos conjuntos de 6 bits, logo se você pega uma seqüência de 3 bytes vocês produz 4 símbolos da base de 64.
Lembrando que a base é 2^6 e os 64 símbolos são:
O base 64 é padronizado pela RFC 989 (PEM de 87), depois 1421 e tem alguma coisa também na 2045.