sql >> Databasteknik >  >> RDS >> Oracle

Vet någon vilken krypteringsteknik JDeveloper/SQL Developer använder för att bevara autentiseringsuppgifter?

För den nyfikna, vad du faktiskt ser är den hemliga nyckeln sammanlänkad med det krypterade lösenordet. Till exempel försökte jag kryptera lösenordet "SAILBOAT" med:

DatabaseProviderHelper.goingOut("SAILBOAT")

I det här specifika fallet blev resultatet:

0527C290B40C41D71139B5E7A4446E94D7678359087249A463

Den första byten är konstant:

05

De nästa 8 byten representerar den slumpmässigt genererade hemliga nyckeln (för DES-chifferet):

27C290B40C41D711

De återstående byten är det krypterade lösenordet:

39B5E7A4446E94D7678359087249A463

Därför, för att dekryptera lösenordet, använder du helt enkelt detta:

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. Infoga en bild från Oracle i SQL Server

  2. Använder avancerade Oracle JDeveloper-funktioner för MySQL-databaser

  3. Varför är varaktigheten NULL för återkommande händelser i Android?

  4. Hur CAST() fungerar i MariaDB