如何使用PowerShell中的当前Windows用户的凭据加密KeePass?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用PowerShell中的当前Windows用户的凭据加密KeePass?相关的知识,希望对你有一定的参考价值。

我需要编写一个加密字符串的脚本,就像在KeePass中加密{PASSWORD_ENC}placeholder一样:

{PASSWORD_ENC} - 加密密码:

{PASSWORD_ENC}占位符由加密形式的当前条目的密码替换。使用当前Windows用户的凭据加密密码。不应存储加密密码,仅适用于当前用户。

(强调我的)

如何以编程方式加密字符串以获得与我在KeePass中获得的密码相同的加密密码?

答案

来自KeePass源代码(KeePassLibUtilityStrUtil.cs

private static readonly byte[] m_pbOptEnt = { 0xA5, 0x74, 0x2E, 0xEC };

public static string EncryptString(string strPlainText)
{
    if(string.IsNullOrEmpty(strPlainText)) return string.Empty;

    try
    {
        byte[] pbPlain = StrUtil.Utf8.GetBytes(strPlainText);
        byte[] pbEnc = ProtectedData.Protect(pbPlain, m_pbOptEnt,
            DataProtectionScope.CurrentUser);

#if (!KeePassLibSD && !KeePassRT)
        return Convert.ToBase64String(pbEnc, Base64FormattingOptions.None);
#else
        return Convert.ToBase64String(pbEnc);
#endif
    }
    catch(Exception) { Debug.Assert(false); }

    return strPlainText;
}

幸运的是,我们可以在PowerShell中使用.NET成员并执行相同的操作:

[System.Reflection.Assembly]::LoadWithPartialName('System.Security') | Out-Null;
[byte[]] $m_pbOptEnt = @(0xA5,0x74,0x2E,0xEC);
$plainBytes = [System.Text.Encoding]::UTF8.GetBytes( "my super strong password is 123456" );
$cipherBytes = [System.Security.Cryptography.ProtectedData]::Protect($plainBytes, $m_pbOptEnt, [System.Security.Cryptography.DataProtectionScope]::CurrentUser);
$cipherPw = [System.Convert]::ToBase64String($cipherBytes);

以上是关于如何使用PowerShell中的当前Windows用户的凭据加密KeePass?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Powershell 更改 Windows 10 中的电源计划并在长脚本后恢复为原始设置?

我们如何使用Windows Powershell脚本替换文本文件中的日期?

如何查看 Windows Server 2016 中所有 PowerShell 会话的命令历史记录?

如何信任 Windows Powershell 中的证书

如何在我的 PowerShell 提示符中显示我当前的 git 分支名称?

如何卸载win10系统自带程序