问题标签 [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 投票
1 回答
436 浏览

c# - 如何将 xml 中的字符串用于 c# 中的字符串变量?

嗨,我有一个包含两个值的 xml 文件。

第一个值是 Powershell 的用户名第二个值是密码作为 powershell 的安全字符串

现在我想读取这些值并将其设置为变量字符串 ps_user 和 SecureString ps_password

我现在的问题是如何使用 SecureString 值。

这是我的xml:

这是我的 C# 代码:

例子:

我怎么能做到这一点?

0 投票
3 回答
377 浏览

c# - C# 解密值和公共类属性...有什么风险?

(如果这是一个重复的帖子,请指点我原来的或告诉我要搜索什么。我找不到任何东西。谢谢!)

因此,我在数据库行中保存了一个加密值。我想检索数据库行的列值并将它们存储在类实例中。在类上为 DECRYPTED值创建公共属性是否安全?

外部进程能否以某种方式访问​​公共财产?我是否需要使用 SecureString(或其他东西)来防止内存黑客攻击?.NET 的 DataProtection 对这些有帮助吗?

是否有关于如何处理这个问题的实用指南/演练(希望没有太多的编码开销)?

这些感觉像是非常基本的问题(羞愧),我听说过关于这些问题的讨论,但在我的搜索中我找不到任何东西。不确定要搜索什么(除了这篇文章标题中的内容)。

与往常一样,任何方向都将不胜感激。

谢谢!


编辑:

谢谢大家的回复。密码是一个不好的例子——我知道这是不明智的,通常不需要解密密码。我想我的问题更笼统,相对于如何处理需要解密的数据。我更新了我的示例以引用加密/解密而不是密码。

我正在编写一个通用监视器程序,需要将访问值、路径和命令保存在数据库中。我觉得最好对这些值进行加密,以尽量减少我们的基础设施等的暴露。

共识似乎是,以任何形式、财产或其他形式保存解密的值都是一个坏主意。

我现在想我将只存储加密的值,然后在每次需要时使用 SecureString 对其进行解密。

再次感谢大家!!

0 投票
1 回答
3507 浏览

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

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

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

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

谢谢。

0 投票
3 回答
2344 浏览

c# - C# - Process.Start - 使用全局变量作为密码 - “无法从'字符串'转换为'System.Security.SecureString'

我设计了一个登录表单,并希望将输入的用户名和密码存储为我可以在其他表单中调用的变量(整个程序是 .exe 文件和 powershell 脚本的集合,我想以最初输入的用户名和密码运行登录表单)。

在程序开始时,我使用以下代码创建了“全局变量”:

在登录表单中,我以这种方式将输入的用户名和密码存储到这些全局变量中:

当我想启动一个进程时,我使用此代码调用它(以登录表单存储的用户名和密码运行它):

我得到的主要错误是在线passwordGlobalVariable.var, 错误说

参数 4:无法从 'string' 转换为 'System.Security.SecureString'

我尝试了不同的方法来尝试将“passwordGlobalVariable.var”转换为安全字符串,或者为另一个字符串变量提供其内容,然后将该变量呈现为安全字符串。我终于没有想法了。在此先感谢您的帮助。

0 投票
1 回答
161 浏览

c#-4.0 - C#:将字符串转换为安全字符串是否有意义?

我想使用安全字符串在变量中设置密码。我从数据库中获取的密码,因为我使用的是散列密码,我需要比较用户提供的密码和我在数据库中拥有的散列密码。

好吧,我从数据库中检索密码,这是一个散列密码。是一个字符串,所以如果我将此字符串转换为安全字符串,我如何从一个不安全的字符串开始,将其转换为安全字符串是否有意义?因为自从我从数据库中获取字符串以来,字符串就被暴露了,并且我第一时间将它存储在字符串中。

如何比较存储在数据库中的密码和用户给出的密码的正确方法是什么?

我正在使用执行此工作的存储库,并且该存储库在用户的本地计算机中执行,而不是在服务器中。

谢谢。

0 投票
1 回答
396 浏览

vb.net - 我应该如何存储敏感数据以供我的应用程序在 VB.net 中使用?

我遇到的一个问题是试图找到一种方法来安全地存储某些信息。我仍在学习和试验 .NET 作为入门语言以及 C。因此,如果我缺乏基本逻辑,请耐心等待。

要求

目前,我正在使用我的应用程序设置中的“设置”存储来存储几条信息,其中包括:

  • SQL 连接字符串(带有凭据)
  • SMTP 服务器设置(带有凭据)
  • 其他各种带有信息的敏感字符串,我不希望有人找到(至少不是没有相当大的努力)

我一直在使用“设置”商店,因为坦率地说,能够更容易地在一个中心位置更改值并将其反映在我的代码中。

我当然意识到我可以很容易地创建一个共享类并将其用作所有这些设置的参考。

我需要做到这一点,以便有人不能只使用 .NET 反射器并获取所有这些信息。- 在使用 SmartAssemply 进行试验后,很快就发现“设置”容器在混淆过程中被忽略了。

前进的方向?

所以我做了一些研究,目前我面临着我认为主要的可能前进方式。(请记住,这是来自我有限的经验)

  1. 创建一个新的共享类,让 SmartAssembly 使用它的混淆方法来隐藏字符串。
  2. 创建一个 INI/XML 文件以与主应用程序并排(外部)放置。这将被加密并在应用程序需要引用任何包含的设置或字符串时被解密。(虽然我想得越多,我认为它似乎就越有缺陷)
  3. 创建一个新的共享类并试验SecureString类?(PoC 将不胜感激)
  4. 你的想法?

例子

例如,假设我试图隐藏以下字符串。

如果提供答案的用户能够连同他们的建议一起提供一个小型 PoC,我将非常感激,该 PoC 展示了我如何保护上述字符串以及如何在我的程序中引用它(例如,如果你倾向于加密)。

0 投票
0 回答
263 浏览

c# - 解密后如何避免内存中数据的未加密副本?

我正在尝试编写一些允许加密/解密数据块的函数。出于兼容性原因,它需要是对称加密,可以保存在一台机器上并在另一台机器上读回,这样就排除了 ProtectedData 的使用,因为它的范围不会比本地机器更宽。(太糟糕了,只需添加该选项就可以省去很多麻烦。)

我已经进行了很多网络搜索,到目前为止,我还没有遇到任何真正尝试从磁盘上的加密值干净地过渡到内存中的 SecureString 的好例子,而两者之间没有任何痕迹。我真的很想看看如何(如果?)它可以完成。

我有一个 Encrypt 功能,它似乎工作得相当好。你给它一个 SecureString,它会返回一个包含 SecureString 内容的加密副本的常规字符串。如果我在调用该函数后保存内存转储,我将无法在转储中的任何位置找到任何未加密数据的副本。这很好。

但是,我对 Decrypt 对应物没有那么幸运。虽然我可以成功解密我的数据并将其恢复到 SecureString,但到完成时,我最终会在内存转储中获得多个解密值副本。当然,以明文形式散布副本会使在内存密码学中使用的全部意义无效。这是不好的。

任何人都可以就如何使此代码“干净”提出任何建议,以便在完成后不会将未加密值的副本留在内存中?

这是我的代码:

如果我跟踪代码并进行内存转储(调试 | 将转储另存为...),然后在结果文件中搜索我的未加密值,我会一直清理到 cs.FlushFinalBlock() 语句。一旦执行,我在转储文件中有 3 个未加密值的副本。

我猜其中之一是内存流缓冲区本身。我可以用 Seek 和 WriteByte 循环消除那个。稍后会弹出更多副本,其中包含 decodedBytes 和 decodedChars 数组,但这些副本也会随着使它们无效的循环而消失。尽管如此,这仍然留下了由同花顺创建的两个副本。

我不是为了在记忆中的任何时候都没有副本而拍摄。(尽管这将是理想的)我认为如果不编写大量代码,这是不可能的。我的目标只是在函数退出后没有任何痕迹留在内存中,以将攻击面保持在最低限度。

为了完整起见,不妨也包括加密功能。就像我说的那样,这个似乎可以正常工作。完成后我没有发现任何残留物。

我还没有深入探讨的另一件事是,如果垃圾收集器在这一切的中间运行会发生什么...这些功能可以减少它在中间发生的可能性吗?

谢谢。

0 投票
2 回答
16233 浏览

c# - 如何在安全上下文中使用不安全代码?

我需要SecureString用于微软的课程,我在互联网上找到了以下代码:

唯一的问题是unsafe关键字不断向我抛出错误说Cannot use unsafe construct in safe context. 不幸的是,我找不到为什么会发生这种情况......

注意: 上面的代码在 LINQPad 中运行,但在 VS2013 中没有(使用 resharper)。

0 投票
2 回答
1336 浏览

java - Java 控制台输入验证以防止 DOS 攻击

全部,

我编写了一个 java 代码,需要检查用户使用控制台输入的文本,我希望代码测试输入的行不超过例如 20 个字母,我写如下:

不确定我是否真的需要检查以防止 DOS 攻击,或者 Java 通常会处理这个问题?

谢谢,

0 投票
1 回答
446 浏览

c# - Bouncy Castle 是否可以保护机密免于“泄露”内存/页面文件以及其他攻击途径?

基于这个问题,我在处理秘密充气城堡时担心以下问题:

  • 加密(在内存转储或页面缓存的情况下)
  • 钉在记忆中
  • 标记为只读的能力(以防止任何进一步的修改)
  • 通过不允许传入常量字符串来安全构造
  • 优化编译器(参见链接文章re: ZeroMemory 宏中的注释),但它适用于 .NET 和 GIT 构建

问题

  • Bouncy Castle 是否使用 .NET 中所需的结构来使其能够安全构建?(SecureString 或等效的直接操作)
  • SecureString(或等效)的覆盖范围是否在库中需要的地方持续存在
  • Bouncy Castle是否必须以某种方式编译以防止编译器优化生效?