SQL Developer V19 - 从连接 XML 中解密密码

问题描述 投票:0回答:3

我有一个 Java 代码来解密存储在 SQL Developer V17 连接 XML 中的密码。 V19 的加密方法或细节似乎已更改。 更新到 SQL Developer V19 后,相同的旧代码无法运行。 有人知道如何解密 SQL Developer V19 连接 XML 中存储的密码吗?

java passwords oracle-sqldeveloper
3个回答
0
投票
  1. 从以下位置的connections.json 文件中获取加密密码: C:\Users\AppData\Roaming\SQL Developer\system18.4.0.376.1900\o.jdeveloper.db.connection 示例: “密码”:“Ehi21wFkasdfc =”,

  2. 从文件中获取加密密钥 位置 C:\Users\AppData\Roaming\SQL 中的product-preferences.xml 开发者\system18.4.0.376.1900\o.sqldeveloper

    示例:

  3. 使用以下网站解密密码。

https://abskmj.github.io/sqldev-pw-decryptor/


0
投票

在本地计算机上执行此操作的替代方法:

  1. 从以下位置的connections.json 文件中获取加密密码: C:\Users\AppData\Roaming\SQL Developer\system18.4.0.376.1900\o.jdeveloper.db.connection 示例: “密码”:“Ehi21wFkasdfc =”,

  2. 从文件product-preferences.xml中获取加密密钥 位置 C:\Users\AppData\Roaming\SQL 开发者\system18.4.0.376.1900\o.sqldeveloper

  3. 使用以下代码解密密码

     package utils;
     import java.security.MessageDigest;
     import java.security.GeneralSecurityException;
     import javax.crypto.Cipher;
     import javax.crypto.spec.IvParameterSpec;
     import javax.crypto.spec.SecretKeySpec;
     import javax.xml.bind.DatatypeConverter;
     import java.util.Base64;
    
    public class Decrypt_OracleSqlDevPW {
     private static byte[] des_cbc_decrypt(
              byte[] encrypted_password,
              byte[] decryption_key,
              byte[] iv)
              throws GeneralSecurityException
              {
    
             Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
              cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryption_key, "DES"), new IvParameterSpec(iv));
              return cipher.doFinal(encrypted_password);
             }
    
             private static byte[] decrypt_v4(
              byte[] encrypted,
              byte[] db_system_id)
              throws GeneralSecurityException
              {
             byte[] encrypted_password = Base64.getDecoder().decode(encrypted);
             byte[] salt = DatatypeConverter.parseHexBinary("051399429372e8ad");
    
             // key = db_system_id + salt
              byte[] key = new byte[db_system_id.length + salt.length];
              System.arraycopy(db_system_id, 0, key, 0, db_system_id.length);
              System.arraycopy(salt, 0, key, db_system_id.length, salt.length);
    
             java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
              for (int i=0; i<42; i++) {
              key = md.digest(key);
              }
    
             // secret_key = key [0..7]
              byte[] secret_key = new byte[8];
              System.arraycopy(key, 0, secret_key, 0, 8);
    
             // iv = key [8..]
              byte[] iv = new byte[key.length - 8];
              System.arraycopy(key, 8, iv, 0, key.length - 8);
    
             return des_cbc_decrypt(encrypted_password, secret_key, iv);
              }
    
             public static void main(String[] argv) { try {
    
             String encryptedPassword = "wwA5s2bU02lfY4aTg==";// password
             String key = "8397631a-9e0f-42-afda-3fafcac1f193";//key in our local machine
    
             byte[] encrypted = encryptedPassword.getBytes();
              byte[] db_system_id = key.getBytes();
    
             byte[] x = decrypt_v4(encrypted, db_system_id);
    
             String password = new String(x);
    
             System.out.println(password);
              }
              catch (Exception e) {
              System.out.println(e.toString());
              }
              }
    

    }


0
投票

您可以使用名为“显示密码”的 SQL Developer 扩展。

下载
    扩展程序
  1. “zip” 安装扩展
帮助 -> 检查更新
  • 从本地文件安装
  • 浏览下载的扩展程序 zip 文件,然后点击“
  • 下一步
  • 重新启动 SQL Developer
转到“
    文件
  1. ”->“显示密码
© www.soinside.com 2019 - 2024. All rights reserved.