【问题标题】:c# - hiding a password for an SSH connection on a locally-run applicationc# - 在本地运行的应用程序上隐藏 SSH 连接的密码
【发布时间】:2017-01-12 10:17:35
【问题描述】:

首先,我要感谢这个社区,它让我目前正在使用 c# 编程。我边走边自学,并没有真正进行任何正式培训,所以你们帮了大忙。

我正在编写一个小型应用程序,旨在使升级我公司销售的一件设备的日常任务变得更容易一些。通常这些设备没有连接到互联网,我们需要远程连接到客户的计算机以完成通过 SSH 连接到他们的设备的任务,并在登录后运行一些命令来进行升级。我希望向客户分发一个应用程序,以及一个加密密钥(在我们这边生成),其中包含有关他们正在升级的选项的信息,以及确保密钥只能在他们的设备上使用的序列号。

在我的应用程序中,我使用 SharpSSH 来完成初始 SSH 连接,效果很好。但是我担心的是,我们设备上的 root 密码实际上是一个相当简单的密码。这些设备本身的功能相当有限,因此如果他们自己安装了它,人们将无能为力,但是如果他们安装了该设备,他们可以根据需要升级自己的设备和其他任何人的设备。

所以我的问题是,我怎样才能最好地“隐藏”我的脚本中的密码,这样任何有反编译器的人都不容易搜索到它?

现在代码很简单,

SshStream ssh = new SshStream(ip, "easytoguessuser", "notsocomplexpassword");

所以我想将密码隐藏在某个地方,但我想不出一种方法意味着拥有反编译器的人不能只打开 exe 并查找密码在哪里,或者我是如何得出密码的从别的什么...

【问题讨论】:

    标签: c# security ssh passwords


    【解决方案1】:

    就像现实世界中的锁一样,您无法将拥有正确工具的人拒之门外。你只能让它变得更难。

    这可以包括:

    • 将密码存储在加密字符串中,仅在使用前不久解密

    • 混淆源代码,因此更难确定连接的初始化位置

    这不会让它变得安全,但它会阻碍那些不太坚定的人。

    【讨论】:

    • 感谢 Dawnkeeper,如果我将用户名和密码存储在我们发送给客户的密钥中,只有当他们在“解密器”应用程序中提供的序列号时才能正确解密,可能是更好的方法?这意味着用户名/密码只有在密钥解密时才可见,但理论上有人可以重新编译代码,在解密代码时添加断点并找出密码吗?我想这会是一个更好的方法,但我当时是不是偏执狂?
    • 这会增加另一层安全性,但是是的,它仍然可以调试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 2020-11-21
    • 2018-12-13
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多