问题标签 [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.

0 投票
7 回答
17064 浏览

.net - 保存安全字符串

我对正在开发的程序提出的功能要求之一是能够保存用户输入的凭据列表,以便可以共享它们。激发这个请求的具体用例是在一个大型企业网络上使用我们的程序,该网络由相当好的 LAN 组成,通过一个不稳定的 WAN 连接。我们的想法是,与其让我们的程序在 WAN 宕机时与它对抗,不如发送一个包含严密保护的管理员凭据的“配置”文件,在每个 LAN 中运行它并将结果压缩并通过电子邮件发送背部。

是的。

我最初的直觉是对这个要求嗤之以鼻——保存密码?真的吗?当然,公司的网络部门更希望你尝试销售他们拥有的任何 WAN 产品——但事实证明,我使用凭证的其中一个类可以使用 SecureString,而且,注意总是很好可以为人们节省一些精力的方法。这让我想知道:

是否可以保存加密的 SecureString,以便我可以将敏感数据保存到文件并在其他地方打开它?

你有什么想法,堆栈溢出?

0 投票
2 回答
5511 浏览

c# - C#:向用户询问密码,然后将密码存储在 SecureString 中

在我目前正在为客户开发的小型应用程序中,我需要询问用户他的 Windows 登录用户名、密码和域,然后使用System.Diagnostics.Process.Start来启动应用程序。

我有一个带有 UseSystemPasswordChar 的文本框来屏蔽输入的密码。

我需要一个System.Security.SecureString将密码提供给System.Diagnostics.Process.Start

如何将输入的文本转换为安全字符串,而不是一个接一个地执行?或者:是否有更好的窗口控件来要求用户输入将输入的文本作为 SecureString 返回的密码?

0 投票
1 回答
3240 浏览

.net - 使用安全字符串并确保其安全

因此,.NET 框架提供了SecureString类,用于以安全的方式存储字符串。但是要阅读信息并使用它,您必须将其返回为标准字符串。请参阅此实现示例

从使用指针的示例中可以看出,我们返回一个未加密的字符串。我们现在如何管理字符串的“不安全”实例?设置值后,使用该值最安全的方法是什么?

编辑

这个问题的目的是讨论在使用 SecureStrings 然后使用这些值时减少潜在攻击表面积的方法。不是关于“重复”链接的“为什么”。

0 投票
1 回答
1251 浏览

c# - 从非托管 unicode 字符串创建 SecureString

我想尝试以最好的方式将 CryptUnprotectData windows API 函数和 .net SecureString 联系在一起。CryptUnprotectData 返回一个由字节数组和字节长度组成的 DATA_BLOB 结构。在我的程序中,这将是一个 Unicode UTF-16 字符串。SecureString 有一个构造函数,它接受一个 char* 和长度参数,所以我希望能够执行以下操作:

这行得通,除了 UTF-16 是可变长度的,所以我真的不知道用什么作为长度参数。上面的示例假设 2 字节字符 (BMP),但对于其他平面,它可能最多为 4 字节。我需要知道字节数组中 UTF-16 字符的数量。在不复制内存中的值(从而损害安全性)的情况下,最好的方法是什么。我计划尽快清零并释放字节数组。

0 投票
3 回答
776 浏览

.net - 构建安全字符串类型的注意事项

我已经开始构建一个安全字符串类型——我称之为SecureStringV2——来扩展 .Net 框架中现有的 SecureString 类型。这种新类型将为现有类型添加一些基本功能(检查相等性、比较等),但仍保持 SecureString 类型提供的安全性,即在类型使用后清除内存中的所有内容。我计划使用 Marshal 类和哈希算法来实现这些功能。关于如何完成这项工作并正确完成的指针将不胜感激。你们中是否有人认为我的实施想法有任何问题?谢谢 :)

更新:关于图书馆的核心类,这是我的想法到目前为止引导我的地方。看看,让我知道你的想法。

}

0 投票
2 回答
3224 浏览

c# - 在 .NET 远程处理应用程序中使用 System.Security.SecureString?

我正在开发一个远程处理应用程序,客户端在其中查找存储特定信息以登录到 Web 服务器。它在将属性存储为 System.Security.SecureString 的类中设置用户名和密码。然后,我尝试将带有登录凭据的类传递给服务器对象,该对象使用它连接到 Web 主机,获取并返回一些信息。当我调用服务器方法时,出现此错误:

含 SecureStrings 的类被标记为可序列化的,这在开发过程中一直有效,直到我添加了 SecureString 属性。我需要做些什么来完成这项工作,还是我必须将 SecureString 更改为 String?

0 投票
1 回答
2419 浏览

c# - 如何将 SecureString 初始化为只读

我想创建一个变量,一个安全的变量,它或多或少是一个在我的代码中使用的 CONST。我已经研究过使用 System.Security.SecureString,看起来它可能是票,因为我不希望用户找到这个密码。唯一的问题是初始化它。在大多数情况下,看起来 SecureString 最好由用户按键“设置”。我不想要这个。我遇到的一个选项如下所示:

唯一的问题是,char 数组 't','e','s','t' 可能在编译后仍然打包在内存中。有没有什么好的方法可以在编译时间之前将 SecureString 的值设置为常数值并对该值进行加扰?

0 投票
1 回答
4069 浏览

.net - 如何使用 SecureString 创建 SHA1 或 SHA512 哈希?

我想在 VB.NET 中使用 SecureString 变量并将其转换为 SHA1 或 SHA512 哈希。如何安全地将 SecureString 转换为 HashAlgorithm.ComputeHash 将接受的字节数组?

0 投票
3 回答
6490 浏览

vb.net - 是否可以从 VB .NET 安全地获取 SecureString 值?

我一直觉得 SecureString 有点奇怪,但假设我的大部分问题是由于我不理解的安全问题。今天我决定坐下来自学,但我遇到了一个看似致命的障碍。

我设想的场景是“用户在文本框中输入密码,该密码被散列并与存储的散列进行比较”。起初我担心文本框包含字符串,但后来我意识到您可以滚动使用 SecureString 作为其存储的自定义文本框。凉爽的。给我带来麻烦的是“密码经过哈希处理和比较......”部分。

我第一次破解 VB .NET 中的问题是天真和错误的:

这只是将密码填充到常规字符串中,并首先破坏了使用 SecureString 的目的。于是我不断搜索,找到了一篇博文在 C# 中很好地解决了这个问题:将字符串制成 BSTR,复制到固定字符串中,然后在使用后将 BSTR 和固定字符串都归零。这似乎是一个更好的主意,因为它最大限度地减少了不安全字符串在内存中的时间。但是,似乎没有办法在 VB .NET 中实现这一目标。C# 正在使用其不安全的代码特性来进行指针操作,但 VB .NET 无法做到这一点。我看了一下 Marhsall.Copy(),但它看起来像是面向数组的。我曾想过尝试将对象的 IntPtr 变量和 BSTR 转换为字符串,但这仍然让我使用了像 String.Replace() 这样的方法,它将创建一个新字符串。

根本不可能从 VB .NET 中做到这一点,还是我遗漏了什么?

编辑 我只接受了 AMissico 的回答,但略有保留。Marshal.ReadByte() 方法将从非托管内存中复制一个字节并在非托管内存中创建一个字节。这使得攻击者找到密码的各个字符的机会很小。我认为这远低于找到整个字符串的几率,但我引用的(显然已失效)文章中的 C# 能够使用不安全的代码巧妙地避免这种情况。思考的过程是它使用 GCHandle 将字符串固定在内存中,然后使用不安全的代码来解决 .NET 字符串的不变性。在 VB .NET 中似乎不可能的巧妙技巧。我将尝试返回 C# 代码本身。

0 投票
14 回答
207678 浏览

c# - 将字符串转换为安全字符串

如何转换StringSecureString