标签: securestring

设置密码框的文本

我正在创建一个需要用户登录(用户名+密码)的应用程序。由于这是一个安全的应用程序,我使用 WPF 的 PasswordBox.SecurePassword 安全地创建密码的哈希值(使用 SHA512CryptoServiceProvider,从自定义流进行哈希值)以用作 Rfc2898DeriveBytes 的密码。假设我有一个 AES-256-CBC 实现,它可以安全地检索和存储 key+IV,所以这不是问题。
我目前正在实现一种让用户能够存储密码的方法,这样他们就不必每次登录时都输入密码。到目前为止,我能够使用 AES 自定义实现安全地存储密码,并且我可以读取安全地输入密码(即,无需将其以纯文本形式完全放入内存中)。
我遇到的问题是当我尝试替换密码框中的文本时。PasswordBox.SecurePassword 是只读的,我尝试使用PasswordBox.SecurePassword.AppendChar(someChar) 但字段/值仍为空。我想PasswordBox.SecurePassword只返回一个副本(SecureString.Copy())而不是原始变量(查看.NET源代码证实了这一点)。
有什么方法可以实现我想要的或者我需要创建自定义 WPF 控件吗?

c# security wpf securestring

2
推荐指数
1
解决办法
4971
查看次数

ConvertTo-SecureString 密钥在指定状态下使用无效

当我以特定用户身份运行脚本时遇到错误,但不是以我自己的用户帐户运行脚本。这是在 Windows 2012R2 上。Powershell 模块已安装并已使用一段时间,但使用另一个帐户会阻止其运行。因为我已经能够运行它,所以我觉得我可以排除脚本中任何丢失的文件或错误的命令。脚本的其余部分取决于此。我还使用将通过自动化运行命令的服务帐户运行 Convertto-securestring 选项,但它仍然无法正常工作。

这是我运行的用于转换密码的安全密码脚本

$password = "password"
$secureStringPwd = $password | ConvertTo-SecureString -AsPlainText -Force 
$secureStringText = $secureStringPwd | ConvertFrom-SecureString 
Set-Content "E:\temp\ExportedPassword.txt" $secureStringText`
Run Code Online (Sandbox Code Playgroud)

这是尝试以用户 B 身份运行后的错误消息

line 4 $pwdTxt = Get-Content "E:\temp\ExportedPassword.txt"
line 5 $securePwd = $pwdTxt | ConvertTo-SecureString

ConvertTo-SecureString : Key not valid for use in specified state.
At E:\temp\get_user_cliffsv4.ps1:5 char:24
+ $securePwd = $pwdTxt | ConvertTo-SecureString
+                        ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [ConvertTo-SecureString], 
CryptographicException
+ FullyQualifiedErrorId : 
ImportSecureString_InvalidArgument_CryptographicError,Microsoft.PowerShell. 
Commands.ConvertToSecureStringCommand
Run Code Online (Sandbox Code Playgroud)

我已通过自动化软件多次运行此脚本,但在测试时,由于此错误,我必须以我的个人帐户运行该命令,并且为了解决此问题以便我可以完成测试,我调用了该选项。我的问题是,我使用的帐户是否缺少任何特定权利?我是否必须在该帐户下安装 Powershell 扩展,或者我可以在 PS 或服务器上设置/更改某些内容以允许服务帐户运行此脚本吗?提前致谢!

powershell securestring password-protection powershell-4.0

2
推荐指数
1
解决办法
3万
查看次数

为什么SecureString解密会在可执行文件之间产生不同的结果?

proxy.exe中,我通过以下方式创建安全字符串:

public SecureString GetSecureEncryptionKey()
    {
        string strPassword = "8charPwd";
        SecureString secureStr = new SecureString();
        if (strPassword.Length > 0)
        {
            foreach (var c in strPassword.ToCharArray()) secureStr.AppendChar(c);
        }
        return secureStr;
    }
Run Code Online (Sandbox Code Playgroud)

然后在main.exe中我使用此函数解密它:

public string convertToUNSecureString(SecureString secstrPassword)
    {
        IntPtr unmanagedString = IntPtr.Zero;
        try
        {
            unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(secstrPassword);
            return Marshal.PtrToStringUni(unmanagedString);
        }
        finally
        {
            Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString);
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是返回的字符串是空的,除非我加密main.exe中的初始字符串,然后返回的解密字符串确实是"8charPwd".为什么会这样?SecureString加密是否绑定到可执行文件?

c# wcf securestring

1
推荐指数
1
解决办法
520
查看次数

了解 Powershell SecureStrings

今天想深入研究一下SecureString .NET 和Powershell 的概念,但没想到,我理解的很好。

如果我有密码并将其转换为安全字符串。它在我输入时保存了吗?(加密或纯文本)。

现在,如果我将密码作为 PSCredential 的一部分传递给 PSSession:会发生什么?PSSession 是否对传递的密码运行 ConvertFrom-SecureString?但是密码又被加密了。它如何知道如何将其传递给 PSSesion?

powershell session securestring

1
推荐指数
1
解决办法
358
查看次数

在 C# 中将 Aes.Key 转换为 SecureString

如何将 Aes.Key 转换为 secureString ?我正在做一个字节 [] -> 字符串 -> 安全字符串。我正面临一个不同的问题。将字节 [] 中的密钥转换为字符串并返回到字节 [] 时,我得到了不同的字节 []。代码有什么问题?

Aes aes = Aes.Create();
aes.GenerateIV();
aes.GenerateKey();

byte[] byteKey1 = aes.Key; 

string sKey = Encoding.UniCode.GetString(byteKey);
byte[] byteKey2= Encoding.UniCode.GetBytes(sKey);
Run Code Online (Sandbox Code Playgroud)

“byteKey1”和“byteKey2”有时是不同的。如果我使用 Encoding.Default,它们是相等的,但是当不同的机器具有不同的默认编码时会出现问题。

如何将 byte[] 中的 Key 转换为 SecureString 并返回到 byte[] ?

谢谢。

c# encryption bytearray securestring

0
推荐指数
1
解决办法
3163
查看次数

为什么SecureString没有重载的构造函数?

考虑以下:

_securePassword = New SecureString()
For Each character As Char In password
    _securePassword.AppendChar(character)
Next
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,文档似乎暗示这是填充SecureString实际信息的"最佳实践"方式:

从一个角色一次创建一个字符串时......

我的问题

为什么不包括New SecureString(password)

对于我来说,这似乎是纯粹的锅炉板代码.

vb.net securestring

0
推荐指数
1
解决办法
35
查看次数