9
पर जावा डिक्रिप्शन कोड माइग्रेट करें मैं पिछले कुछ दिनों से जावा कोड के गोलांग के माइग्रेशन के साथ संघर्ष कर रहा हूं और अब मैं अटक गया हूं।गोलांग
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
हैं, तो यह काम कर जावा कोड है कोड - bzip2 शीर्षलेख ("BZ")
CBzip2InputStream
के लिए छोड़ा जाना चाहिए, लेकिनके लिए नहीं - पहले 16 बाइट्स जावा और golang में
instream
से पढ़ा है, एक ही हैं 17 बाइट सभी बाइट्स जो भी कारण
यदि पहले 16 बाइट समान हैं और बाकी नहीं हैं, तो मुझे संदेह है कि दो कार्यान्वयन एक अलग ब्लॉक चेनिंग मोड का उपयोग कर रहे हैं: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation। ऐसा लगता है कि आप गोलांग में सीबीसी का उपयोग कर रहे हैं, यह सुनिश्चित नहीं है कि जावा ऑफ-डिफॉल्ट में डिफ़ॉल्ट क्या है। – Gijs
मैंने गोलांग में उपलब्ध सभी विधियों का प्रयास किया। सीबीसी केवल कम से कम पहले बाइट्स सही ढंग से डिक्रिप्ट किए गए थे। हो सकता है कि यदि कोई चौथाई आपूर्ति नहीं की जाती है तो जावा डिफ़ॉल्ट रूप से ईसीबी का उपयोग करता है, मैं उस पर जांच करूंगा, संकेत के लिए धन्यवाद। – fasmat