Created
January 23, 2020 18:47
-
-
Save riipandi/4afc60b7e7f882ba22adb9a0bd64ed67 to your computer and use it in GitHub Desktop.
DBeaver Decryptor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.*; | |
/** | |
* Usage: | |
* compile : javac dbeaverDecryptor.java # compile it | |
* execute : | |
* MacOS : java dbeaverDecryptor ~/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json | |
* Linux : java dbeaverDecryptor ~/.local/share/.DBeaverData/workspace6/General/.dbeaver/credentials-config.json | |
*/ | |
public class dbeaverDecryptor { | |
// 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])))); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment