none
请问,我需要在源代码放置一个密码,请问有什么方法可以保护它? RRS feed

  • 问题

  • 我的程序需要连接一个远程服务器,我有密码,请问我在写程序的时候是直接将这个密码写在源代码里面,还是怎么样比较好?

    写在源代码里面的话,别人用反编译工具不是就可以看到这个密码了吗?


    da jia hao!

    2017年9月18日 3:06

答案

  • 方法一:将密码加密后记录在源代码里。然后需要的时候进行解密。流程如下:

    1.使用RSA等非对称加密算法产生一对公私钥对。公钥为pub,私钥为priv

    2.随机生成一个密码p。此密码就是与服务器交互使用的密码。

    3.用priv加密p,得到pw。该pw可以写在源代码里。

    4.pub也写在源代码里或者作为一个文件随程序一起。

    5.需要使用密码的时候,用pub解密从代码里得到的pw,解密的p就是与服务器通信的密码。

    方法二:附带一个文件,密码藏在该文件中。但是不是连续的藏在某个位置。而是东一个字节西一个字节,位置信息存储在源代码里。需要使用密码的时候根据存储的位置信息组合出密码来。

    方法三:结合方法一和方法二。

    将公钥藏在附带的文件中。获取公钥的方法也是东一个字节位置西一个字节位置。这样增加了破解难度。

    2017年9月26日 1:57

  • Hi liubin,

    最简单的方法将这个密码通过加简单的加密方法保存。然后运行的时候解析。

    C# 常用加密解密帮助类:
    http://www.cnblogs.com/weiweixiang/p/5619415.html

    复杂一点使用非对称密钥加密(Asymmetric Key Encryption):非对称密钥加密使用一组公共/私人密钥系统,加密时使用一种密钥,解密时使用另一种密钥。公共密钥可以广泛的共享和透露。当需要用加密方式向服务器外部传送数据时,这种加密方式更方便。如: RSA

    c#rsa 非对称加密:
    http://blog.csdn.net/zghnpdswyp/article/details/49763201


    C#实现RSA加密与解密、签名与认证:
    http://blog.csdn.net/u010678947/article/details/48652875


    注意:此回复包含对第三方万维网站点的引用。 微软正在为您提供这方面的信息。 Microsoft不控制这些网站,并没有测试这些网站上发现的任何软件或信息; 因此,Microsoft不能对在那里发现的任何软件或信息的质量,安全性或适用性做任何陈述。 使用互联网上发现的任何软件都存在固有的危险,微软警告您确保在从因特网检索任何软件之前,您完全了解风险。

    Best Regards,

    Yohann Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 liubin 2017年10月10日 4:37
    2017年9月18日 5:55
    版主

全部回复

  • 密码配置在环境变量里,程序读取环境变量

    One world, one dream!

    2017年9月18日 4:56

  • Hi liubin,

    最简单的方法将这个密码通过加简单的加密方法保存。然后运行的时候解析。

    C# 常用加密解密帮助类:
    http://www.cnblogs.com/weiweixiang/p/5619415.html

    复杂一点使用非对称密钥加密(Asymmetric Key Encryption):非对称密钥加密使用一组公共/私人密钥系统,加密时使用一种密钥,解密时使用另一种密钥。公共密钥可以广泛的共享和透露。当需要用加密方式向服务器外部传送数据时,这种加密方式更方便。如: RSA

    c#rsa 非对称加密:
    http://blog.csdn.net/zghnpdswyp/article/details/49763201


    C#实现RSA加密与解密、签名与认证:
    http://blog.csdn.net/u010678947/article/details/48652875


    注意:此回复包含对第三方万维网站点的引用。 微软正在为您提供这方面的信息。 Microsoft不控制这些网站,并没有测试这些网站上发现的任何软件或信息; 因此,Microsoft不能对在那里发现的任何软件或信息的质量,安全性或适用性做任何陈述。 使用互联网上发现的任何软件都存在固有的危险,微软警告您确保在从因特网检索任何软件之前,您完全了解风险。

    Best Regards,

    Yohann Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 liubin 2017年10月10日 4:37
    2017年9月18日 5:55
    版主
  • 我还是有一个疑问,就是如果别人反编译,还是可以看到你如何去解密的,例如你解密用的密钥,所以别人是不是也可以解密你的密码?那是不是这个问题就无解了?

    da jia hao!

    2017年9月18日 7:01
  • Hi liubin,

    那你可以考虑尝试非对称密钥加密(Asymmetric Key Encryption) 去实现你的加密。

    如果还是不能满足你的需求,请尝试考虑其他方案(不要把敏感信息放在别人可以破解的文件中)。

    Best Regards,

    Yohann Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年9月18日 7:05
    版主
  • 自己用私匙加密,程序中可以写入硬编码加密后的密码,并且程序中用公匙解密。

    私匙自己留着,通过反编译也无法解密。

    这种方法的弊端是,破解的人,如果可以反编译,可以替换私匙加密的密码。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年9月19日 1:03
  • 方法一:将密码加密后记录在源代码里。然后需要的时候进行解密。流程如下:

    1.使用RSA等非对称加密算法产生一对公私钥对。公钥为pub,私钥为priv

    2.随机生成一个密码p。此密码就是与服务器交互使用的密码。

    3.用priv加密p,得到pw。该pw可以写在源代码里。

    4.pub也写在源代码里或者作为一个文件随程序一起。

    5.需要使用密码的时候,用pub解密从代码里得到的pw,解密的p就是与服务器通信的密码。

    方法二:附带一个文件,密码藏在该文件中。但是不是连续的藏在某个位置。而是东一个字节西一个字节,位置信息存储在源代码里。需要使用密码的时候根据存储的位置信息组合出密码来。

    方法三:结合方法一和方法二。

    将公钥藏在附带的文件中。获取公钥的方法也是东一个字节位置西一个字节位置。这样增加了破解难度。

    2017年9月26日 1:57