HeidiSQL 导出密码解密

https://www.fournoas.com/posts/how-to-recover-a-stored-password-from-heidisql/

function Decrypt {
    param(
        [string]$str
    )

    if ([string]::IsNullOrEmpty($str)) {
        return ""
    }

    # 提取salt(最后一个字符)
    $salt = 0
    $saltChar = $str[-1]

    # 下面代码要去掉转义符
    if (-not [int]::TryParse($saltChar, \[ref\]$salt)) {
        $salt = 0
    }

    # 处理主体部分(排除最后一个salt字符)
    $processedPart = $str.Substring(0, $str.Length - 1)
    $result = New-Object System.Text.StringBuilder

    for ($i = 0; $i -lt $processedPart.Length; $i += 2) {
        # 确保有足够的字符可以提取
        if ($i + 1 -ge $processedPart.Length) { break }

        # 解析十六进制值
        $hexValue = $processedPart.Substring($i, 2)
        try {
            $nr = [Convert]::ToInt32($hexValue, 16)
        }
        catch {
            $nr = 0
        }

        # 应用解密算法
        $nr -= $salt
        if ($nr -lt 0) {
            $nr += 255
        }

        # 转换并追加字符
        [void]$result.Append([char]$nr)
    }

    return $result.ToString()
}
上一篇
下一篇