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()
}