में डिक्रिप्ट करता है मेरे पास एक बैश स्क्रिप्ट है जो एन्क्रिप्ट करने के लिए openssl टूल का उपयोग करती है।एईएस openssl कमांड लाइन उपकरण के साथ एन्क्रिप्ट करता है, और जावा
#!/bin/bash
key128="123456789"
iv="123456789"
openssl enc -aes-128-cbc -in test -out test.enc -K $key128 -iv $iv
और जावा कोड जो स्क्रिप्ट द्वारा उत्पादित फ़ाइल को डिक्रिप्ट करने का प्रयास करता है।
public class crypto {
public static void main(String[] args)
{
try {
File f = new File("test.enc");
Cipher c;
Key k;
String secretString = "01020304050607080900010203040506";
String ivString = "01020304050607080900010203040506";
byte[] secret = hexStringToByteArray(secretString);
byte[] iv = hexStringToByteArray(ivString);
c = Cipher.getInstance("AES/CBC/PKCS5Padding");
k = new SecretKeySpec(secret, "AES");
c.init(Cipher.DECRYPT_MODE, k, new IvParameterSpec(iv));
CipherInputStream cis = new CipherInputStream(new FileInputStream(f), c);
BufferedReader br = new BufferedReader(new InputStreamReader(cis));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (NoSuchAlgorithmException e) {
System.out.println(e.getMessage());
} catch (NoSuchPaddingException e) {
System.out.println(e.getMessage());
} catch (InvalidKeyException e) {
System.out.println(e.getMessage());
} catch (InvalidAlgorithmParameterException e) {
System.out.println(e.getMessage());
}
}
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len/2];
for (int i = 0; i < len; i += 2) {
data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
}
33,1 71%
जब मैं जावा कोड चलाता हूं, तो यह कुछ भी प्रिंट नहीं करता है। क्या स्क्रिप्ट और जावा कोड के बीच कोई मेल नहीं है?
एक माध्यमिक प्रश्न यह है कि क्या मैं कुंजी/iv के बजाय पासवर्ड का उपयोग करने के लिए इसे फिर से लिख सकता हूं। ऐसा करने के लिए, क्या iv को यह जानने का कोई तरीका है कि किसी दिए गए पासवर्ड के लिए openssl उपयोग करता है?
शुरुआत के लिए, '123456789'' 0x01020304050607080900010203040506' जैसा नहीं है। आपके चतुर्थ के लिए भी चला जाता है। – Polynomial
openssl प्रत्येक चरित्र को हेक्स मान के रूप में मानता है, जबकि जावा कोड वर्णों की एक जोड़ी को देख रहा है। – Ravi
हां, और 0x12 0x0102 जैसा नहीं है। – Polynomial