मेरे पास डीईएस/ईसीबी/पीकेसीएस 5 पैडिंग (एक गुप्त वाक्यांश द्वारा उत्पन्न 56 बिट डीईएस कुंजी) के साथ लिखी गई एक निजी कुंजी फ़ाइल है और मैं इसे डिक्रिप्ट करना चाहता हूं। मैं पता नहीं क्यों, लेकिन हर मैं decript लिए, मेरे सिफर वर्ग की विधि doFinal इस त्रुटि फेंक रहा है कोशिश:BadPaddingException: अंतिम ब्लॉक को सही ढंग से गद्देदार नहीं
javax.crypto.BadPaddingException: Given final block not properly padded at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA13*..) at javax.crypto.Cipher.doFinal(DashoA13*..) at...
यहाँ मेरी कोड है:
public static PrivateKey readPrivateKeyFromFile(File file, String chaveSecreta) {
try {
SecureRandom r = new SecureRandom(chaveSecreta.getBytes());
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
keyGen.init(56, r);
Key key = keyGen.generateKey();
byte[] privateKeyBytes = decryptPKFile(file, key);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
PrivateKey privateKey = null;
try {
privateKey = keyFactory.generatePrivate(privateKeySpec);
} catch (InvalidKeySpecException e) {
JOptionPane.showMessageDialog(null, "Erro 01, tente mais tarde");
}
return privateKey;
} catch (NoSuchAlgorithmException e) {
JOptionPane.showMessageDialog(null, "Erro 02, tente mais tarde");
}
return null;
}
public static byte[] decryptPKFile(File file, Key key){
try{
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
byte[] cipherText = readBytes(file);
cipher.init(Cipher.DECRYPT_MODE, key);
System.out.println(cipher);
System.out.println(cipherText);
byte[] text = cipher.doFinal(cipherText);
return text;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public static byte[] readBytes(File file) {
try {
FileInputStream fs = new FileInputStream(file);
byte content[] = new byte[(int) file.length()];
fs.read(content);
return content;
} catch (FileNotFoundException e) {
System.out.println("Arquivo não encontrado!");
e.printStackTrace();
} catch (IOException ioe) {
System.out.println("Erro ao ler arquivo!");
ioe.printStackTrace();
}
return null;
}
किसी भी syggestions?
मैं फ़ाइल से पढ़ा गया इनपुट अनुमान लगा रहा हूं वह वैध एन्क्रिप्टेड टेक्स्ट नहीं है। डीईएस ब्लॉक एल्गोरिदम होने के साथ, आपको यह जांचना चाहिए कि फ़ाइल की लंबाई 64 का गुणा है या नहीं, इसका मतलब यह होगा कि फ़ाइल दूषित हो गई है। – markubik
आपका मतलब 8 से अधिक है? यह है, फ़ाइल दूषित नहीं है, मैंने जांच की है। –
@markubik यह एक यादृच्छिक कुंजी है: पी –