【问题标题】:Proper Way to Store Passwords in Temporary XML Config File在临时 XML 配置文件中存储密码的正确方法
【发布时间】:2016-03-25 22:40:33
【问题描述】:

我创建了一个程序,它启动一个单独的子进程,对文件执行任务。其中一些文件受密码保护,因此为了让子进程在这些文件上运行,它需要密码。我的计划是传递一个 XML 配置文件,其中包含与此类似的所有文件路径和密码:

<Files>
    <File>
      <Path>C:\Users\hahaha\hehehe\file2</Path>
      <Password>123456abc</Password>
    </File>
    <File>
      <Path>C:\Users\blablaa\abc\file1</Path>
      <Password>123456abc</Password>
    </File>
</Files>

此信息保留在本地计算机上,永远不会通过网络传递。此 XML 配置文件是在父进程中创建的。子进程将表示此 XML 配置文件路径的字符串作为参数。然后子进程将解析 XML 文件,然后从文件和密码((键,值)=> 文件路径,密码)中创建一个字典。该过程完成后,可以删除配置文件。

我的问题是:将密码存储在配置文件中的最佳做法和方法是什么?我认为加密它们就足够了。或者如果有更好的完全不同的方法,那会是什么样子?

【问题讨论】:

    标签: c# xml child-process password-encryption


    【解决方案1】:

    A.想法是使用 Windows 密码管理器。

    1. 使用 CredAPI 为 URL“我的超级应用程序”创建临时密码(如果未创建)
    2. 用它加密 XML 部分。

    B.想法是使用 CryptoAPI 在用户个人存储中为应用程序创建证书

    1. 使用 Crypto API 在个人用户界面中创建并放入包含两个密钥的临时证书
    2. 用它加密 XML 部分。

    要获得对 XML 坏人的访问权限,需要侵入其他用户帐户。如果管理员重置密码,那么所有员工都将丢失。

    但是将数据存储在临时文件中只是为了将其传递给子进程是一件幼稚的事情。 正确的方法是使用其中任何一个来完成该任务

    • 网络远程处理
    • TcpServer - TcpClient 并通过网络流数据传输
    • 内存映射文件
    • 管道

    【讨论】:

    • 我发现有关 IPC 的 .NET 信息非常复杂且令人困惑。我对管道很熟悉,并且我尝试过使用内存映射文件,但我永远无法让它工作。什么时候使用内存映射文件和什么时候使用管道有意义?不管我使用哪一个,是否准确地说,如果您在 2 个单独的进程之间传递对象,则必须在传递之前对其进行序列化,并在子进程接收到它们时对其进行反序列化?或者是否可以在不序列化的情况下传递对象?
    • 您可以使用序列化(更舒服)、BinaryWriter,将数据作为字节传递。从我的角度来看,序列化更舒服。关于 IPC:如果子进程需要一些关于连接位置等的特殊信息,您可以将其作为参数传递给它。我在 OSS IpCamEmu 中实现了 IPC。你可以去ipcamemu.codeplex.com/SourceControl/latest 下载它的代码。然后看到 IpCamEmuC 生成自己作为一个工人,看到类 ChiefConsole, Worker, ChiefWorkerSettingsHelper
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多