sql >> Databáze >  >> RDS >> Oracle

Ví někdo, jakou šifrovací techniku ​​používá JDeveloper/SQL Developer k zachování přihlašovacích údajů?

Pro zvědavce, to, co ve skutečnosti vidíte, je tajný klíč spojený se zašifrovaným heslem. Zkoušel jsem například zašifrovat heslo „SAILBOAT“ pomocí:

DatabaseProviderHelper.goingOut("SAILBOAT")

V tomto konkrétním případě byl výsledek:

0527C290B40C41D71139B5E7A4446E94D7678359087249A463

První bajt je konstantní:

05

Dalších 8 bajtů představuje náhodně vygenerovaný tajný klíč (pro šifru DES):

27C290B40C41D711

Zbývající bajty jsou zašifrované heslo:

39B5E7A4446E94D7678359087249A463

Proto k dešifrování hesla jednoduše použijete toto:

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);
}


  1. Použití strace jako nástroje pro ladění DG40DBC v systému Linux

  2. Nefunkční web a Twitter Feed

  3. Python:osvědčený postup a nejbezpečnější způsob připojení k MySQL a provádění dotazů

  4. Java – Jak volat proceduru Oracle s vlastními typy?