问题标签 [securestring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - WPF PasswordBox 和 SecureString:不能 MakeReadOnly()?
是否可以标记PasswordBox.SecurePassword
为ReadOnly
?
考虑这个简单的代码:
XAML:
C#:
它将输出False
. 为什么?
编辑:为了确保,我尝试了这个,它按预期输出“True”。
wpf - 从 PasswordBox 获取密码
我在 SO 找到了关于这个问题的一些信息,但不知何故我并没有真正得到它;-) 根据我的阅读,由于安全原因,PasswordBox 的密码不能绑定到属性,即保留纯密码在记忆中。
我的模型包含这个:
虽然不支持将数据绑定到 PasswordBox,但Microsoft 必须知道如何从 PasswordBox 获取密码并以安全的方式使用它,嗯?
什么是合适且相对简单的方法?
.net - 如何在不首先转换为不安全字符串的情况下使用 DPAPI 加密 SecureString 以保存到磁盘?
我想使用 DPAPI 加密 SecureString,以便将其保存到磁盘。
.net DPAPI 类是 ProtectedData 类,但是ProtectedData.Protect有一个采用字节数组的重载。没有接受 SecureString 的重载。
在Encrypting Passwords in a .NET app.config File中,John Galloway 通过首先将 SecureString 转换为不安全的字符串来利用上述重载。我想避免这种情况,因为它首先破坏了使用 SecureString 的目的。
ConvertFrom-SecureString PowerShell cmdlet 似乎可以满足我的需要,因为“如果未指定密钥,则使用 Windows 数据保护 API (DPAPI) 来加密标准字符串表示”,但我不确定如何使用此 cmdlet直接来自.net,或者即使这样做是个好主意。
powershell - 将 PowerShell SecureString 作为参数或控制台条目处理
我在尝试从中调用 DirectoryServices 查询的 PowerShell 脚本时遇到了很多困难。目前,如果我做一个
随后
一切正常。但是,如果我尝试使用 param($password) 传递字符串参数,然后使用以下代码将其转换为安全字符串:
经过大量调试后,我可以看到这在将字符串转换为安全字符串方面工作正常,但是当我使用该参数时,我从 DirectoryServices 得到了错误的用户/密码。从控制台读取时一切正常。关于我可以做些什么来接受参数或在没有参数的情况下接受控制台输入的任何想法?
这是我希望的工作,但没有:
c# - 在 .NET 中散列 SecureString
在 .NET 中,我们有 SecureString 类,在您尝试使用它之前一切都很好,至于(例如)散列字符串,您需要明文。在给定一个接受字节数组并输出字节数组的哈希函数的情况下,我已经尝试编写一个将散列 SecureString 的函数。
我相信这将正确地散列字符串,并在函数返回时正确地从内存中清除任何明文副本,假设提供的散列函数表现良好并且不会复制它没有的输入擦洗自己。我在这里错过了什么吗?
c# - 安全使用 SecureString 登录表单
所以有一个似乎很少使用的类:SecureString。它至少从 2.0 开始就已经存在,并且有一些 SO 问题,但我想我会问我自己的具体问题:
我有一个登录表单;带有用户名和(屏蔽)密码字段的简单 WinForms 对话框。当用户同时输入并单击“登录”时,信息被传递给一个注入的身份验证类,该类执行一层密钥拉伸,然后对拉伸密钥的一半进行散列以进行验证,而另一半是加密用户的对称密钥账户数据。当这一切都完成后,loginForm 被关闭,身份验证器类被释放,系统继续加载主表单。相当标准的东西,可能比标准的哈希密码和比较涉及更多,但在我的情况下,通过以明文形式存储用户数据,简单的哈希密码将被击败,因为该数据包括第三个的凭据-派对系统(我们都知道人们喜欢重用密码)。
这是第一个问题;我将如何使用 SecureString 从 Password 文本框中检索密码,而不会通过文本框的 Text 属性将其公开为普通 System.String?我假设有一种方法可以访问由 CLR 类包装的文本框的非托管 GDI 窗口,并使用 Marshal 类提取文本数据。我只是不知道如何,我似乎无法找到好的信息。
这是第二个问题;将密码作为 SecureString 后,如何将其从 System.Security.Crypto 命名空间传递给哈希提供程序?我的猜测是我会使用 Marshal.SecureStringToBSTR(),然后从返回的 IntPtr 使用 Marshal.Copy() 回到字节数组中。然后我可以调用 Marshal.ZeroBSTR() 来清理非托管内存,并且一旦我有了哈希值,我就可以使用 Array.Clear() 将托管数组清零。如果有一种更简洁的方法可以让我完全控制内存的任何托管副本的生命周期,请告诉我。
第三个问题;这一切真的有必要吗,或者 System.String 在托管内存环境中固有的不安全性有点夸大其词?任何用于存储密码的东西,无论是加密的还是其他的,都应该在操作系统考虑将应用程序交换到虚拟内存之前(允许在硬关机)。冷启动攻击是一种理论上的可能性,但实际上,这有多普遍?更大的担忧是现在解密的用户数据,它作为用户的一部分在整个应用程序生命周期内一直存在(因此将成为使用 SecureStrings 的主要候选者,除了它们保持相当休眠的几个基本用法)。
powershell - 我可以使用 PowerShell SecureString 更改服务器管理员密码吗?
我正在寻找编写一个脚本,该脚本将使用 PowerShell 更改远程服务器上的管理员密码。以下命令将执行此操作
但我希望能够隐藏"NewPassword"
在脚本中以使其更安全。
那么有没有办法将它保存"NewPassword"
到一个安全的 .txt 文件中,然后就可以像这样使用它了?
该脚本将作为计划任务运行。
powershell - 使用 SecureString 对 plink.exe 命令进行密码加密
我想在 PowerShell 中加密密码
我试过这个:
在 CLI 中:
在我的 script.ps1 中:
但它不起作用...
我尝试使用凭据,但似乎并没有更好...
(我的密码没有任何空格或重音字符)
任何想法?
powershell - 如何使用 powershell 的 read-host 功能接受外部服务的密码?
我正在编写一个脚本来连接到 SOAP 服务。建立连接后,我需要在发送的每个命令中传入用户名/密码。我遇到的问题是,当我使用 read-host 执行此操作时,我的密码以明文形式显示并保留在 shell 中:
如果我使用 -AsSecureString 隐藏它,则该值将无法再传递给服务,因为它现在是一个 System.Security.SecureString 对象:
当我通过这个时,它不起作用。我不关心以明文形式传递给服务的密码,我只是不希望他们在输入密码后停留在用户的外壳上。是否可以隐藏 Read-Host 输入,但仍将密码存储为明文?如果没有,有没有办法可以将 System.Security.SecureString 对象作为明文传递?
谢谢
c# - 如何正确保存密码
我尝试编写一个程序,您可以使用它登录到远程网站。对于一些拥有多个帐户的人,我尽量让他们更容易,并将帐户数据存储在IsolatedStorage
. 在我的代码的当前状态下,密码只是在 a 中输入,TextBox
一旦存储转换为 MD5 哈希。
现在我想将它重构为正确的代码,但我被卡住了。
A通过和PasswordBox
公开其数据。PasswordBox.SecureString
PasswordBox.Password
所以当点击我的保存按钮时,我会执行类似的操作
这是我的问题
- 一旦我将普通密码从我的
PasswordBox
输入var password
中,内存中是否有可见的东西?一些黑客是否能够通过反射/调试使这个简单的值可见?哪个代码使这些字符串真正可见?我需要注意什么? - 怎么处理
SecureString
的PasswordBox
?
我对所有这些东西有点不知所措,我还无法弄清楚如何正确处理应用程序中的密码的本质。
我不是恳求一个完整的解决方案和运行代码。如果有人可以让我开始,我会很高兴。而且,我不想要企业解决方案。我只是在寻找一个,它易于实现并且尽可能节省我投入的精力。