Decode Total Commander FTP passwords. Installable packages for PHP, Python, JavaScript (Node.js), Rust, C#, Go, Java, PowerShell, and Ruby.
The Total Commander FTP Password Recovery libraries mirror the decryption algorithm used on this site. Each package runs offline on your machine — use them to decode ciphertext from wcx_ftp.ini (hex fields) or to build your own tools and automation. Flexible hex input is supported (case ignored; spacing between byte pairs allowed), which helps when pasting directly from an .ini file.
Official releases are published to Packagist, PyPI, npm, crates.io, NuGet, pkg.go.dev, Maven, PowerShell Gallery, and RubyGems. Source is on GitHub.
| Language | Installation | Package | Sources |
|---|---|---|---|
![]() |
Run:
or add the following to |
Packagist | GitHub |
![]() |
pip install total-commander-ftp-password-recovery |
PyPI | GitHub |
![]() |
Run
or add the following to |
npm | GitHub |
![]() |
Run:
or add the following to |
Crates | GitHub |
![]() |
Run:
or add to your |
NuGet | GitHub |
![]() |
Run:
or add the following to your |
Go | GitHub |
![]() |
Add this dependency to your pom.xml |
Maven | GitHub |
![]() |
Run:
or:
|
PowerShell Gallery | GitHub |
![]() |
Run:
or add the following to your |
RubyGems | GitHub |
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use PELock\TotalCommanderFtpPassword\TotalCommanderPasswordDecoder;
$cipherHex = '00112233445566778899aabbccddeeff';
$decoder = new TotalCommanderPasswordDecoder();
$plain = $decoder->decryptPassword($cipherHex);
if ($plain === false) {
throw new RuntimeException('Invalid ciphertext (bad hex, odd length, or too short).');
}
echo $plain;
echo bin2hex($plain);
from binascii import hexlify
from total_commander_ftp_password import TotalCommanderPasswordDecoder
cipher_hex = "00112233445566778899aabbccddeeff"
decoder = TotalCommanderPasswordDecoder()
plain = decoder.decrypt_password(cipher_hex)
if plain is None:
raise RuntimeError("Invalid ciphertext (bad hex, odd length, or too short).")
print(plain)
print(hexlify(plain).decode("ascii"))
import { Buffer } from 'node:buffer';
import { TotalCommanderPasswordDecoder } from 'total-commander-ftp-password-recovery';
const cipherHex = '00112233445566778899aabbccddeeff';
const decoder = new TotalCommanderPasswordDecoder();
const plain = decoder.decryptPassword(cipherHex);
if (plain === null) {
throw new Error('Invalid ciphertext (bad hex, odd length, or too short).');
}
console.log(Buffer.from(plain).toString('latin1'));
console.log(Buffer.from(plain).toString('hex'));
use total_commander_ftp_password_recovery::TotalCommanderPasswordDecoder;
let cipher_hex = "00112233445566778899aabbccddeeff";
let mut decoder = TotalCommanderPasswordDecoder::new();
let plain = decoder
.decrypt_password(cipher_hex)
.expect("Invalid ciphertext (bad hex, odd length, or too short).");
let latin1: String = plain.iter().map(|&b| char::from(b)).collect();
println!("{latin1}");
print!("hex: ");
for b in &plain {
print!("{b:02x}");
}
println!();
/******************************************************************************
* Total Commander FTP Password Recovery usage example.
*
* Version : v1.0.1
* Language : C#
* Author : Bartosz Wójcik
* Web page : https://www.pelock.com
*
*****************************************************************************/
using PELock.TotalCommanderFtpPasswordRecovery;
const string cipherHex = "00112233445566778899aabbccddeeff";
var decoder = new TotalCommanderPasswordDecoder();
var plain = decoder.DecryptPassword(cipherHex);
if (plain is null)
{
Console.Error.WriteLine("Decode failed.");
return 1;
}
Console.WriteLine(System.Text.Encoding.Latin1.GetString(plain));
Console.WriteLine("hex: " + Convert.ToHexString(plain).ToLowerInvariant());
return 0;
/******************************************************************************
* Total Commander FTP Password Recovery usage example.
*
* Version : v1.0.1
* Language : Go
* Author : Bartosz Wójcik
* Web page : https://www.pelock.com
*
*****************************************************************************/
package main
import (
"encoding/hex"
"fmt"
"os"
totalcommanderftppasswordrecovery "github.com/PELock/Total-Commander-FTP-Password-Recovery-Go"
)
func main() {
const cipherHex = "00112233445566778899aabbccddeeff"
decoder := totalcommanderftppasswordrecovery.New()
plain, err := decoder.DecryptPassword(cipherHex)
if err != nil {
fmt.Fprintln(os.Stderr, "Decode failed.")
os.Exit(1)
}
fmt.Println(string(plain))
fmt.Println("hex: " + hex.EncodeToString(plain))
}
/******************************************************************************
* Total Commander FTP Password Recovery usage example.
*
* Version : v1.0.1
* Language : Java
* Author : Bartosz Wójcik
* Web page : https://www.pelock.com
*
*****************************************************************************/
import com.pelock.totalcommander.TotalCommanderPasswordDecoder;
public class BasicUsage {
public static void main(String[] args) {
String cipherHex = "00112233445566778899aabbccddeeff";
TotalCommanderPasswordDecoder decoder = new TotalCommanderPasswordDecoder();
byte[] plain = decoder.decryptPassword(cipherHex);
if (plain == null) {
System.err.println("Decode failed.");
System.exit(1);
}
System.out.println(decoder.decryptPasswordString(cipherHex));
StringBuilder hex = new StringBuilder();
for (byte b : plain) {
hex.append(String.format("%02x", b & 0xFF));
}
System.out.println("hex: " + hex);
}
}
################################################################################
#
# Total Commander FTP password decoder usage example.
#
# Decrypt a hex password stored in wcx_ftp.ini.
#
# Version : v1.0.0
# Language : PowerShell
# Author : Bartosz Wójcik
# Web page : https://www.pelock.com
#
################################################################################
using module TotalCommanderFtpPasswordRecovery
$decoder = New-TotalCommanderPasswordDecoder
$bytes = $decoder.DecryptPassword('00112233445566778899aabbccddeeff')
if ($null -eq $bytes) {
Write-Host 'Could not decrypt the password (invalid hex or too short).'
}
else {
$hex = [BitConverter]::ToString($bytes).Replace('-', '').ToLowerInvariant()
Write-Host ("Decrypted bytes (hex): {0}" -f $hex)
}
# frozen_string_literal: true
###############################################################################
#
# Total Commander FTP Password Recovery
#
# Version : v1.0.1
# Language : Ruby
# Author : Bartosz Wójcik
# Web page : https://www.pelock.com
#
###############################################################################
require "total-commander-ftp-password-recovery"
cipher_hex = "00112233445566778899aabbccddeeff"
decoder = TotalCommanderPasswordDecoder.new
plain = decoder.decrypt_password(cipher_hex)
if plain.nil?
warn "Decode failed."
exit 1
end
puts decoder.decrypt_password_string(cipher_hex)
puts "hex: #{plain.map { |b| format("%02x", b) }.join}"
Each package ships a small tc-ftp-password-decode helper (via Composer vendor/bin, pip console scripts, npx, or cargo install). Example:
tc-ftp-password-decode 00112233445566778899aabbccddeeff
| PHP (Composer) | pelock/total-commander-ftp-password-recovery |
| Python (pip) | total-commander-ftp-password-recovery |
| JavaScript (npm) | total-commander-ftp-password-recovery |
| Rust (Cargo) | total-commander-ftp-password-recovery |
| C# (NuGet) | PELock.TotalCommanderFtpPasswordRecovery |
| Go | github.com/PELock/Total-Commander-FTP-Password-Recovery-Go |
| Java (Maven) | com.pelock:total-commander-ftp-password-recovery |
| PowerShell Gallery | TotalCommanderFtpPasswordRecovery |
| Ruby (RubyGems) | total-commander-ftp-password-recovery |
If you would like to ask me about Total Commander FTP Password Recovery SDKs, or something's not clear, mail me. I'll be happy to answer all of your questions.