जिज्ञासु के लिए, जो आप वास्तव में देख रहे हैं वह एन्क्रिप्टेड पासवर्ड के साथ गुप्त कुंजी है। उदाहरण के लिए, मैंने "SAILBOAT" पासवर्ड को एन्क्रिप्ट करने का प्रयास किया:
DatabaseProviderHelper.goingOut("SAILBOAT")
इस विशेष उदाहरण में, परिणाम यह था:
0527C290B40C41D71139B5E7A4446E94D7678359087249A463
पहली बाइट स्थिर होती है:
05
अगले 8 बाइट्स बेतरतीब ढंग से उत्पन्न गुप्त कुंजी (डीईएस सिफर के लिए) का प्रतिनिधित्व करते हैं:
27C290B40C41D711
शेष बाइट एन्क्रिप्टेड पासवर्ड हैं:
39B5E7A4446E94D7678359087249A463
इसलिए, पासवर्ड को डिक्रिप्ट करने के लिए, आप बस इसका उपयोग करें:
public static byte[] decryptPassword(byte[] result) throws GeneralSecurityException {
byte constant = result[0];
if (constant != 5) {
throw new IllegalArgumentException();
}
byte[] secretKey = new byte[8];
System.arraycopy(result, 1, secretKey, 0, 8);
byte[] encryptedPassword = new byte[result.length - 9];
System.arraycopy(result, 9, encryptedPassword, 0, encryptedPassword.length);
byte[] iv = new byte[8];
for (int i = 0; i < iv.length; i++) {
iv[i] = 0;
}
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKey, "DES"), new IvParameterSpec(iv));
return cipher.doFinal(encryptedPassword);
}