9
ここ数日間GolangへのJavaコードの移行に苦労しています。これは、作業のJavaコードです:Java暗号化コードを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);
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)
:
- は
_
により省略し、すべてのエラー値は、この作品でnil
ありますコード CBzip2InputStream
ではbzip2ヘッダー( "BZ")を省略する必要がありますが、では省略してくださいJavaとgolangにinstream
から読ま3210の- 最初の16のバイトは、すべてのバイトが
最初の16バイトが同じで残りが同じでない場合、私は2つの実装が異なるブロック連鎖モードを使用していると思われます:http://en.wikipedia.org/wiki/Block_cipher_modes_of_operationあなたがGolangでCBCを使っているようですが、デフォルトでJavaが手に取られていないかどうかはわかりません。 – Gijs
私はgolangで利用可能なすべての方法を試しました。少なくとも最初の数バイトが正しく復号化されているのはCBCのみでした。おそらく、JavaがECBを使用していない場合は、デフォルトでECBが使用されます。 – fasmat