sql >> Database teknologi >  >> RDS >> Oracle

Er der nogen, der ved, hvilken krypteringsteknik JDeveloper/SQL Developer bruger til at bevare legitimationsoplysninger?

For de nysgerrige, hvad du faktisk ser, er den hemmelige nøgle sammenkædet med den krypterede adgangskode. For eksempel prøvede jeg at kryptere adgangskoden "SAILBOAT" ved hjælp af:

DatabaseProviderHelper.goingOut("SAILBOAT")

I dette særlige tilfælde var resultatet:

0527C290B40C41D71139B5E7A4446E94D7678359087249A463

Den første byte er konstant:

05

De næste 8 bytes repræsenterer den tilfældigt genererede hemmelige nøgle (for DES-krypteringen):

27C290B40C41D711

De resterende bytes er den krypterede adgangskode:

39B5E7A4446E94D7678359087249A463

Derfor, for at dekryptere adgangskoden, skal du blot bruge denne:

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. PostgreSQL-privilegier og brugerstyring - hvad du bør vide

  2. Brug binær COPY-tabel FROM med psycopg2

  3. Opdeling af strengen i sql server

  4. Lær om, hvordan du bruger SQL Server Management Studio