首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >恢复存储在我的DBeaver连接中的DB密码

恢复存储在我的DBeaver连接中的DB密码
EN

Stack Overflow用户
提问于 2016-10-08 03:33:15
回答 9查看 102.3K关注 0票数 118

我忘记了dev实例的密码(不负责任..。是的,我正在研究)。我用密码将连接保存在我的DBeaver中。我仍然能够使用这种连接进行连接。DBeaver没有用纯文本显示它。不管怎样,我可以取回密码吗?让DBA重置密码是最后的手段。我试图复制粘贴到记事本,复制显然是禁用的。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2016-10-08 03:43:12

代表DBeaver 6.1.3+

凭证文件位于~/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json (我在Mac上),它遵循与其前身不同的加密策略。请参考下一个答案,看看如何解密。就像一种魅力。

预- DBeaver 6.1.3

遵循以下步骤(我的DBeaver版本为3.5.8,在Mac OsX El Capitan上)

  1. 找到DBeaver存储连接详细信息的文件。对我来说,它就在这个位置,~/.dbeaver/General/.dbeaver-data-sources.xml。这个文件是隐藏的,所以当你寻找它的时候要记住这一点。
  2. 在该文件中找到感兴趣的Datasource定义节点。
  3. 解密密码:不幸的是,除了密码,一切都是纯文本;密码是某种加密形式。使用此工具将其解密为纯文本。

通过复制DBeaver解密密码的方法的核心,我组装了一个快速而肮脏的Java程序。一旦您有了加密的密码字符串,只需执行此程序,它就会将密码转换为纯文本并打印出来。

如何运行它

在13号线上,只需将OwEKLE4jpQ==替换为您感兴趣的数据源在.dbeaver-data-sources.xml文件中找到的任何加密密码。编译并运行它,它将打印纯文本密码.

https://github.com/jaisonpjohn/dbeaver-password-retriever/blob/master/SimpleStringEncrypter.java

显然,这是一个“流行”的错误。因此,我使用上述代码部署了一个AWS lambda函数。使用这个风险,您将永远不知道我是否正在记录您的密码。

代码语言:javascript
运行
复制
curl https://lmqm83ysii.execute-api.us-west-2.amazonaws.com/prod/dbeaver-password-decrypter \
-X POST --data "OwEKLE4jpQ=="

更好的是,这里是UI https://bugdays.com/dbeaver-password-decrypter。这是不言而喻的,冒着自己的风险使用这个。

票数 218
EN

Stack Overflow用户

发布于 2020-11-07 09:52:57

这可以用OpenSSL来完成:

代码语言:javascript
运行
复制
openssl aes-128-cbc -d \
  -K babb4a9f774ab853c96c2d653dfe544a \
  -iv 00000000000000000000000000000000 \
  -in credentials-config.json | \
  dd bs=1 skip=16 2>/dev/null

macOS在一行中的示例:

代码语言:javascript
运行
复制
openssl aes-128-cbc -d -K babb4a9f774ab853c96c2d653dfe544a -iv 00000000000000000000000000000000 -in "${HOME}/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json" | dd bs=1 skip=16 2>/dev/null

对于Linux,将上面的路径更改为~/.local/share/DBeaverData/workspace6/General/.dbeaver/credentials-config.json

密钥来自来源,并转换为十六进制。这可以用Python完成:

代码语言:javascript
运行
复制
>>> import struct
>>> struct.pack('<16b', -70, -69, 74, -97, 119, 74, -72, 83, -55, 108, 45, 101, 61, -2, 84, 74).hex()
'babb4a9f774ab853c96c2d653dfe544a'

编辑:我已经出版了这里的脚本

票数 140
EN

Stack Overflow用户

发布于 2019-08-23 16:51:08

对于DBeaver 6.1.3+,creds现在以不同的加密方式存储在一个"json“文件中。

这似乎是我的工作:

代码语言:javascript
运行
复制
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.*;

public class DecryptDbeaver {

  // from the DBeaver source 8/23/19 https://github.com/dbeaver/dbeaver/blob/57cec8ddfdbbf311261ebd0c7f957fdcd80a085f/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/app/DefaultSecureStorage.java#L31
  private static final byte[] LOCAL_KEY_CACHE = new byte[] { -70, -69, 74, -97, 119, 74, -72, 83, -55, 108, 45, 101, 61, -2, 84, 74 };

  static String decrypt(byte[] contents) throws InvalidAlgorithmParameterException, InvalidKeyException, IOException, NoSuchPaddingException, NoSuchAlgorithmException {
    try (InputStream byteStream = new ByteArrayInputStream(contents)) {
      byte[] fileIv = new byte[16];
      byteStream.read(fileIv);
      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
      SecretKey aes = new SecretKeySpec(LOCAL_KEY_CACHE, "AES");
      cipher.init(Cipher.DECRYPT_MODE, aes, new IvParameterSpec(fileIv));
      try (CipherInputStream cipherIn = new CipherInputStream(byteStream, cipher)) {
        return inputStreamToString(cipherIn);
      }
    }
  }

  static String inputStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
  }

  public static void main(String[] args) throws Exception {
    if (args.length != 1) {
      System.err.println("syntax: param1: full path to your credentials-config.json file");
      System.exit(1);
    }
    System.out.println(decrypt(Files.readAllBytes(Paths.get(args[0]))));
  }

}

在本地文件系统上传递您的凭据-config.json文件的路径,对我来说是

代码语言:javascript
运行
复制
 Compile it
 $ javac DecryptDbeaver.java
 Now run it [adjusts the paths to target your credentials-config.json file]
 $ java DecryptDbeaver ~/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json
 Or if java 11+:
 $ java DecryptDbeaver.java ~/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json

它将把连接的user+pass输出到控制台。

{"postgres-jdbc-some-id":{"#connection":{"user":"your_user_name","password":"your_password"...

如果您不知道哪个密码是基于用户名的哪个DB,则必须将它最初输出的id名称交叉链接到同级data-sources.json文件(该文件应该已经存在且未加密,并包含数据库坐标)。

票数 65
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39928401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档