问题标签 [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.
string - 连接安全字符串
是否可以在 PowerShell 中将安全字符串与变量和不安全字符串连接起来?
我有一个公式用于我们的独立环境(无域)中的本地管理员密码。我想将该公式的一部分安全地存储在文件中,然后获取它,将其转换为常规字符串,并将其与另一个对象和另一个字符串连接以形成密码。
我的意图不是在我整理的工作流程中以纯文本形式公开我们的公式。还有另一种我想念的方式吗?机器太多,无法轻松地单独存储每个密码。
c# - 如何在 C# 中解密通过 PowerShell 加密的字符串
是否可以在 C# 中解密通过PowerShell加密的字符串以及如何解密?
该字符串通过 PowerShell 加密,如下所示:
要使用 PowerShell 将其转换回来,我可以使用这些调用 C# class 的命令System.Runtime.InteropServices.Marshal
。
文件包含已转换为加密标准的字符串string("hello")
。
因此,如果打开file.txt
文件,它看起来类似于:
c# - 从内存中清除 C# 字符串
出于安全原因,我正在尝试清除 C# 字符串的内存内容。我知道这个SecureString
类,但不幸的是我不能在我的应用程序中SecureString
使用String
。需要清除的字符串是在运行时动态创建的(例如,我不想清除字符串文字)。
我发现的大多数搜索结果基本上表明清除 a 的内容String
是不可能的(因为字符串是不可变的)并且SecureString
应该使用。
因此,我确实在下面提出了自己的解决方案(使用不安全的代码)。测试表明解决方案有效,但我仍然不确定解决方案是否有问题?有更好的吗?
编辑:由于 GC 在clearString
被调用之前移动字符串的评论:下面的代码片段怎么样?
c# - 设置 PasswordBox 的文本
我正在创建一个需要用户登录(用户名 + 密码)的应用程序。由于这是一个安全的应用程序,我使用 WPF 的 PasswordBox.SecurePassword 来安全地创建密码哈希(使用 SHA512CryptoServiceProvider,来自自定义流的哈希)以用作 Rfc2898DeriveBytes 的密码。假设我有一个 AES-256-CBC 实现,它可以安全地检索和存储密钥+IV,所以这不是问题。
我目前正在为用户实现一种方法来存储他们的密码,这样他们就不必每次登录时都输入密码。到目前为止,我能够使用 AES 自定义实现安全地存储密码,并且我可以阅读密码安全(也就是说,无需将其以纯文本形式完全放入内存中)。
我遇到的问题是当我尝试替换 PasswordBox 中的文本时。PasswordBox.SecurePassword 是只读的,我尝试使用 PasswordBox.SecurePassword.AppendChar(someChar) 但字段/值仍然为空。我想 PasswordBox.SecurePassword 只返回一个副本 (SecureString.Copy()) 而不是原始变量(查看 .NET 源代码证实了这一点)。
有什么方法可以实现我想要的,或者我需要创建一个自定义 WPF 控件吗?
c# - 持久化到磁盘时是否必须加密 SecureString?
对于 C# 控制台应用程序,我需要在应用程序设置中保留密码,但是当我创建类型设置时System.Security.SecureString
,设置本身会从纯文本配置文件中删除。由于我再也看不到原始值,因此无法验证数据在保存时是否仍处于加密状态。
是SecureString
最好的方法还是我应该ProtectedData
用来简单地加密字符串?
--EDIT-- 这是我用来验证 aSecureString
可以持久化的测试代码。
c++ - 将 Powershell SecureString 传递给 C++ 程序?
我有一个本机程序,它接受在命令行中传递的密码。该密码显示在服务器日志中,因此我想通过在输入命令行之前对其进行加密来混淆它。然后我会在程序中解密它并像以前一样使用它。我的想法是我使用 powershell 创建一个带有密码的 SecureString,然后使用 ConvertFrom-SecureString 将其设为可打印的文本字符串。然后将该字符串在命令行上传递给本机 c++ 程序。从那里,我将其解码回二进制加密形式,然后将其解密回原始纯文本密码。容易吧?
从很少的文档来看,我认为 ConvertFrom-SecureString 进行 Base64 编码以使二进制 SecureString 无法打印文本。谁能证实这一点?我使用 ATL::Base64Decode() 恢复二进制字节。在比较原始和解码的前 20 个字节时,这似乎有效。
之后,我试图解密 SecureString 字节。再次,一些文档似乎暗示 SecureString 加密是使用机器密钥(或用户会话密钥)完成的。基于此,我正在尝试使用 DPAPI CryptUnprotectData 方法进行解密。在这里,虽然我得到了一个“(0x8007000d)数据无效”的decrupt失败。这听起来会奏效吗?如果是这样,知道我在哪里偏离路线吗?
这是解密方法...
vb.net - 与 Securestring 混淆
我希望有点厚。我需要编写一个程序,其中包含硬编码的机器本地管理员帐户用户名和密码(因此普通用户可以在 principalcontext 上调用 validatecredentials)
这显然是一个坏主意,所以我正在研究securestring。
但是,要将数据转换为安全字符串,您是否不需要将其作为常规字符串传递(这是不可变的,因此会给您带来最初的安全风险)
我哪里错了?
c# - 在这种情况下使用 SecureString 会提高安全性吗?
我的自定义 .Net 进程使用与当前上下文不同的帐户映射驱动器。密码存储在配置文件中,DPAPI 使用机器密钥加密。
该代码有效,但我想知道 SecureString 的使用是否会提供额外的安全性。我相信下面的弱点在于 PlainBytes 数组和 MapPwd 和 MapDriveCmd 字符串,当它们以纯文本形式存在于内存中时。
我对 SecureString 进行了一些研究,但不太了解它是否适用于此。在下面的代码之后没有使用三个局部可疑变量。如果我在没有 SecureString 的情况下保持原样,车库收集器会在流程结束之前处理掉这些吗?
欢迎对该技术的任何其他评论。谢谢。
c# - 安全地将加密的标准字符串转换为安全字符串
我有一个加密的标准字符串,通过“convertfrom-securestring”在powershell中创建并保存到文件中。后来,我用 C# 应用程序(在同一用户 ID 和同一台机器上)读取了这个加密字符串。我想将此加密字符串转换为安全字符串对象。在 powershell 中,可以使用“convertto-securestring”来做到这一点。如何在 c# 中安全地做到这一点?
我知道这个答案(How can I use ConvertTo-SecureString),但它假设加密字符串是使用已知密钥创建的。这与在没有密钥的情况下创建加密字符串的情况不同(因此与构建它的用户 ID 和机器相关联。)
另请注意,在上述问题的评论中,引用了 Microsoft 的文档,表明在未提供密钥的情况下使用 Windows 数据保护 API (DPAPI)。这篇文章 ( https://msdn.microsoft.com/en-us/library/ms229741(v=vs.110).aspx ) 展示了如何使用 DPAPI,但不幸的是,以 Microsoft 文章中指定的方式使用它会result 再次导致字符串在字符串对象中以明文形式出现(我们无法控制,相对于处置),因此以指示的方式使用它是不安全的。
实际上,这实际上是这个(如何在 C# 中解密通过 PowerShell 加密的字符串)和如何使用 ConvertTo-SecureString中的问题的组合。
作为记录,这段代码有效,但我不确定将解密的字符串存储在字节和字符数组中可能会出现什么问题,即使我尽可能快地破坏它:
decrypted
我认为上面的代码是安全的,除了密码在 byte-array然后是 char-array中以明文形式出现的短暂时刻chars
,尽管我们尽快将它们归零,以便至少密码不能徘徊退出例程后在内存中。我们secureString.AppendChar
多次调用,正如 Oguz Ozgu 在下面指出的那样,这意味着secureString
必须在内部解密然后重新加密字符串——人们会认为这是安全地完成的。有人可以评论上述代码的安全问题吗?
编辑:请注意,下面的代码将避免多次调用secureString.AppendChar
,但它必须作为“不安全”运行:
另请注意,下面 Indigo 评论中的链接清楚地表明,这仅在 WINDOWS 上的 .NET 框架中是安全的。