首页 > 解决方案 > 安全问题:将密钥存储为字符串的安全性

问题描述

我正在使用 .NET 4.7.1 和 Visual Studio 2017(社区版),并且我一直将敏感的密钥/许可证数据作为字符串存储在程序中。假设我们有以下字符串:

string password = "admin123" 

从十六进制编辑器或类似方法中提取的安全性如何?我不精通十六进制编辑,但经过一些琐碎的搜索后,似乎字符串以某种方式被混淆了。

任何见解将不胜感激,谢谢。

标签: c#.netbinaryhex

解决方案


这一点都不安全。任何拥有反汇编程序(例如ILSpy)和您的应用程序的人都可以访问您的密码。

为了说明,我创建了一个愚蠢且毫无意义的简单控制台应用程序:

using System;
namespace TestApp
{
    class Program
    {
        private static string password = "admin123";

        static void Main(string[] args)
        {
            Console.Write($"My ultra top secret password is: {password}.");
        }
    }
}  

我编译了它,并在 ILSpy 中打开它。这是我所看到的: 哦,男孩,这不好......
应用程序中密码的 ILSpy 屏幕截图

简而言之,不要在代码中以纯文本形式存储敏感信息。假设您在应用程序/DLL 中编码的任何内容都不会自动混淆/安全。这是不安全的。这里有很多其他帖子比我能更详细地讨论该主题,所以我不会在这里讨论“如何”。


推荐阅读