Hello,
I would like to present a solution in order to encrypt/decrypt the passwords of registry for example the password in the dfc.properties via Java programming with the following Documentum utilities classes:
com.documentum.fc.tools.RegistryPasswordUtils.encrypt("password to be encrypted") ;
com.documentum.fc.tools.RegistryPasswordUtils.decrypt ("password to be decrypted") ;
Dfc.properties
dfc.globalregistry.repository=globalr dfc.globalregistry.username=dm_bof_registry dfc.globalregistry.password=XXXXXfsfezrezxxxxxrezrzrXXX/0ezxxxxxxIGAL
To encrypt/decrypt this value via JAVA programming:
- Java decrypting method:
/** * Decrypting with BOF utils - shorter, base64 encoded passwords * * @param passwordEncrypted * @return */ public static String decryptWithBOFUtils(String passwordEncrypted) { String ret = null; try { System.out.print("\tBOF Utils (decrypt) -> " + passwordEncrypted + "\t\t\t\t"); ret = com.documentum.fc.tools.RegistryPasswordUtils.decrypt(passwordEncrypted); } catch (Exception e) { System.out.println("ERROR: " + e.getMessage()); } return ret; } - Java encrypting method:
/** * Encrypting with BOF utils - shorter, base64 encoded passwords * * @param passwordToEncrypt * @return */ public static String encryptWithBOFUtils(String passwordToEncrypt) { String ret = null; try { System.out.print("\tBOF Utils (encrypt) -> " + passwordToEncrypt+ "\t\t\t\t"); ret = com.documentum.fc.tools.RegistryPasswordUtils.encrypt(passwordToEncrypt); } catch (Exception e) { System.out.println("ERROR: " + e.getMessage()); } return ret; } - Test decrypting and encrypting method:
// --------------------------------- Encrypting/Decrypting with BOF utils String password = null; String clearText = null; password = "XXXXXfsfezrezxxxxxrezrzrXXX/0ezxxxxxxIGAL"; // try decrypting with BOF utils - shorter, base64 encoded passwords System.out.println("\nTrying to decrypt '" + password + "'...\n"); clearText = decryptWithBOFUtils(password); if ((clearText != null) && (clearText.length() > 0)) { System.out.println("'" + clearText + "'"); }else{ System.exit(1); } clearText = "TEST-javablog-Documentum@123"; // try decrypting with BOF utils - shorter, base64 encoded passwords System.out.println("\nTrying to encrypt '" + clearText + "'...\n"); password = encryptWithBOFUtils(clearText); if ((password != null) && (password.length() > 0)) { System.out.println("'" + password + "'"); }else{ System.exit(1); } // try decrypting with BOF utils - shorter, base64 encoded passwords System.out.println("\nTrying to decrypt again '" + password + "'...\n"); clearText = decryptWithBOFUtils(password); if ((clearText != null) && (clearText.length() > 0)) { System.out.println("'" + clearText + "'"); }else{ System.exit(1); }
Here, a code found to decrypt BOF and database passwords (https://www.snip2code.com/Snippet/242104/Decrypt-Documentum-database-passwords-) :
/*
* (C) 2012 MSRoth - msroth.wordpress.com
*
* recoverPW v2
*
* This code will decrypt BOF and database passwords. It will *NOT* decrypt inline user passwords.
*
* From the D6.5 EMC Documentum Content Server Administration Guide, p. 353:
* "Passwords encrypted with encryptPassword cannot be decrypted explicitly
* by an application or user."
*
* usage: c:>java recoverPW <password>
*
* aek.key file must exist in c:\documentum\config
*
*/
package com.dm_misc.recoverpw;
import com.documentum.fc.client.impl.crypto.CryptoUtils;
import com.documentum.fc.tools.RegistryPasswordUtils;
import com.documentum.dmcl.impl.DmclApi;
import com.documentum.web.formext.session.TrustedAuthenticatorTool;
import com.documentum.web.formext.session.TrustedAuthenticatorUtils;
import java.io.*;
public class RecoverPW {
private static final String AEK_PATH = "c:/documentum/config/aek.key";
private static boolean decrypted = false;
private static String password = "";
public static void main(String args[]) {
try {
if (args.length != 1) {
System.out.println("usage: c:>java recoverPW <password>");
System.exit(1);
}
File file = new File(AEK_PATH);
if (!file.exists()) {
System.out.println("Could not find aek.key file. Please copy from Content Server to " + AEK_PATH);
System.exit(1);
}
// get encrypted password from command line
password = args[0];
System.out.println("\nTrying to decrypt '" + password + "'...\n");
// try decrypting with BOF utils - shorter, base64 encoded passwords
try {
String clearText = "";
System.out.print("\tBOF Utils ->\t\t\t\t");
clearText = RegistryPasswordUtils.decrypt(password);
if ((clearText != null) && (clearText.length() > 0)) {
System.out.println("'" + clearText + "'");
decrypted = true;
}
} catch (Exception e) {
System.out.println("ERROR: " + e.getMessage());
}
// try decrypting with API - longer, dm_encrypt_password passwords
try {
String clearText = "";
System.out.print("\tAPI ->\t\t\t\t\t");
DmclApi.getInstance().exec("initcrypto,c," + AEK_PATH);
clearText = DmclApi.getInstance().get("decrypttext,c,DM_ENCR_TEXT=" + password);
if ((clearText != null) && (clearText.length() > 0)) {
System.out.println("'" + clearText + "'");
decrypted = true;
}
} catch (Exception e) {
System.out.println("ERROR: " + e.getMessage());
}
// try decrypting with CryptoUtils(Password)
try {
String clearText = "";
System.out.print("\tCryptoUtils (password) ->\t\t");
CryptoUtils c = CryptoUtils.getInstance();
clearText = c.decryptPassword("DM_ENCR_PASS=" + password);
if ((clearText != null) && (clearText.length() > 0)) {
System.out.println("'" + clearText + "'");
decrypted = true;
}
} catch (Exception e) {
System.out.println("ERROR: " + e.getMessage());
}
// try decrypting with CryptoUtils(Text)
try {
String clearText = "";
System.out.print("\tCryptoUtils (text) ->\t\t\t");
CryptoUtils c = CryptoUtils.getInstance();
clearText = c.decryptText("DM_ENCR_TEXT=" + password, "p6lo3ly1oj5ne&");
if ((clearText != null) && (clearText.length() > 0)) {
System.out.println("'" + clearText + "'");
decrypted = true;
}
} catch (Exception e) {
System.out.println("ERROR: " + e.getMessage());
}
// try WDK DES
try {
String clearText = "";
System.out.print("\tTrustedAuthenticatorUtils (DES) ->\t");
clearText = TrustedAuthenticatorUtils.decryptByDES(password);
if ((clearText != null) && (clearText.length() > 0)) {
System.out.println("'" + clearText + "'");
decrypted = true;
}
} catch (Exception e) {
System.out.println("ERROR: " + e.getMessage());
}
// try WDK decrypt
try {
String clearText = "";
System.out.print("\tTrustedAuthenticatorUtils (decrypt) ->\t");
clearText = TrustedAuthenticatorUtils.decrypt(password);
if ((clearText != null) && (clearText.length() > 0)) {
System.out.println("'" + clearText + "'");
decrypted = true;
}
} catch (Exception e) {
System.out.println("ERROR: " + e.getMessage());
}
// try WDK Authenticator Tool - just uses TrustedAuthenticatorUtils to encrypt
// This will never decrypt, running the main() only does encrypt.
try {
System.out.print("\tWDK authenticator tool -> \t\t");
// create a stream to hold the output since WDK authenticator tool
// prints to console
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
PrintStream old = System.out;
System.setOut(ps);
// call tool to decrypt text
TrustedAuthenticatorTool.main(new String[]{password});
// put things back
System.out.flush();
System.setOut(old);
// see what happened
String clearText = baos.toString();
int idx = clearText.indexOf("Decrypted:");
if (idx > 0) {
clearText = clearText.substring(idx + "Decrypted: [".length(), clearText.length() - 3);
System.out.println("'" + clearText + "'");
if (clearText.equalsIgnoreCase(password)) {
decrypted = false;
} else {
decrypted = true;
}
} else {
System.out.println("ERROR: could not decrypt with WDK Authenticator Tool");
}
} catch (Exception e) {
System.out.println("ERROR: " + e.getMessage());
}
} catch (Exception e) {
System.out.println("General Error: " + e.getMessage());
}
System.out.println();
if (!decrypted) {
System.out.println("\nSorry, could not decrypt '" + password + "'.");
}
System.out.println("Done.");
}
}
That’s all!!!
Huseyin OZVEREN
