Sto lottando con la migrazione del codice Java a Golang negli ultimi giorni e ora sono bloccato. Questo è il codice Java di lavoro:Migrazione del codice di decrittografia Java a Golang
final Key k = new SecretKeySpec(keyString.getBytes(), "AES");
Cipher c = Cipher.getInstance("AES");
c.init(Cipher.DECRYPT_MODE, k);
final InputStream in = new BufferedInputStream(new FileInputStream(fileNameToDecrypt));
final CipherInputStream instream = new CipherInputStream(in, c);
if (instream.read() != 'B') {
System.out.println("Error");
}
if (instream.read() != 'Z') {
System.out.println("Error");
}
final CBZip2InputStream zip = new CBZip2InputStream(instream);
mio implementazione in Golang:
c, _ := aes.NewCipher([]byte(keyString))
// IV must be defined in golang
iv := []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
d := cipher.NewCBCDecrypter(c, iv)
fi, _ := os.Open(fileNameToDecrypt)
stat, _ := fi.Stat()
enc := make([]byte, stat.Size())
dec := make([]byte, stat.Size())
fi.Read(enc)
d.CryptBlocks(dec, enc)
instream := bytes.NewBuffer(dec)
zip := bzip2.NewReader(instream)
quello che so finora:
- tutti i valori di errore omessi da
_
sononil
in questo pezzo di codice - l'intestazione bzip2 ("BZ") deve essere omessa per
CBzip2InputStream
, ma non perbzip2.NewReader
- i primi 16 byte letti dal
instream
in Java e golang sono gli stessi, a partire dal 17 ° byte di tutti i byte differiscono per qualsiasi motivo
Se i primi 16 byte sono uguali e il resto no, sospetto che le due implementazioni stiano utilizzando una modalità di concatenamento di blocchi diversa: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation. Sembra che tu stia utilizzando CBC in Golang, non so quale sia il valore predefinito in Java. – Gijs
Ho provato tutti i metodi disponibili in golang. CBC era l'unico in cui almeno i primi diversi byte sono stati decrittografati correttamente. Forse Java usa BCE per impostazione predefinita se non viene fornita alcuna IV, lo controllerò, grazie per il suggerimento. – fasmat