如何在源代码中安全地存储密码?

3

我想在我的应用程序中存储一个在线服务的密码,我偶尔会传输日志数据到该服务。我的问题是如何以相对安全的方式将密码存储在代码中,以使反向工程难以找到它。有哪些首选步骤?

编辑:用户不输入任何密码。密码是固定的,比如说password123,我必须使用该密码登录到在线服务中传输数据,以一种用户无法通过反向工程获得此密码的方式。是否有一种方法不硬编码并以某种方式隐藏它在代码中?


当客户端与在线服务通信时,密码可能会被嗅探到,您是否已经对此通信进行了安全保护? - Ondřej Kubíček
2个回答

4
理想情况下,您不应该将密码存储在运行在客户机上的源代码中。对于这种情况,仍然可以通过在执行所需的身份验证/授权后使用一些API调用从服务器检索密码来避免硬编码。如果将密码存储在客户端运行的代码中,无论您进行何种混淆/加密/编码,都可以使用反向工程提取它。如上所述,您无法完全保护它,但可以使其难以破解,为此,您可以尝试以下步骤:1.加密您的密码。2.在不同位置的多个部分中存储加密密钥,例如一个部分在代码文件中,一个部分在配置文件中,另一个部分在用户注册表中。3.混淆您的代码。

1
如果您能够澄清如何将密码的哈希用作“在线服务的密码”,那就是一个答案... - Alexei Levenkov
@Dmitry,任何人都不应该能够将哈希值还原为密码。 - PSK
@PSK 有没有代码示例可以演示如何实现这个功能? - Bob
你们的应用程序使用的技术是什么? - PSK
@Bob,我已经更新了答案。 - PSK
显示剩余8条评论

1

所以你有一个字符串,希望在逆向工程时隐藏它。

我建议使用MD5算法对您的字符串(密码)进行哈希处理,并将哈希存储在源代码中,仅将输入密码的哈希结果与存储的哈希值进行比较。

根据评论:

MD5加密效果不够好!

请查看this链接。


1
MD5在大约20年前就已经被破解了。 - Dmitry
阅读有关查找表和彩虹表的内容。顺便说一下,两周前使用3个GF RTX 2080 GPU,在11分钟内破解了128位哈希。是的-盐也在其中。 - Maciej S.
MD5仅在您想要检查数据的完整性时有用,即检查数据是否因传输错误等非恶意更改。它永远不应用于安全目的。 - ckuri
@Dmitry 哇!我不知道!谢谢,那至少对于提问的目的还好吗? - Iman Nia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接