sql >> データベース >  >> RDS >> Oracle

JDeveloper / SQL Developerがクレデンシャルを永続化するために使用している暗号化技術を知っている人はいますか?

    不思議なことに、実際に表示されているのは、暗号化されたパスワードと連結された秘密鍵です。たとえば、次を使用してパスワード「SAILBOAT」を暗号化してみました:

    DatabaseProviderHelper.goingOut("SAILBOAT")
    

    この特定の例では、結果は次のとおりです。

    0527C290B40C41D71139B5E7A4446E94D7678359087249A463
    

    最初のバイトは一定です:

    05
    

    次の8バイトは、ランダムに生成された秘密鍵(DES暗号用)を表します。

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


    1. ヘアサロンデータベースプロジェクト

    2. Ubuntu 20.10 /Ubuntu20.04にApacheCassandraをインストールする方法

    3. HAProxyを使用したPostgreSQLのパフォーマンスの向上

    4. MariaDBデータベース内のすべてのテーブルを一覧表示する4つの方法