隐藏源代码中的密码内容

时间:2009-12-31 17:20:49

标签: java passwords java-me

有谁知道如何在j2me程序的源代码中隐藏密码内容?即所以人们不能将“DBT”视为读取源代码的密码。

public void validateUser(String user, String Password) {     
  if (user.equals("N0203251") && Password.equals("DBT")) {
    switchDisplayable(null, getContinue());
  }
}

6 个答案:

答案 0 :(得分:6)

正如其他人所说。存储哈希值,但您仍然需要使用强密码或自动猜测器会找到您正在使用的密码。

但是,请注意:

如果您的攻击者可以访问源代码,他/她/它可以更改存储的密码哈希值,或者只是删除密码检查。

因此,除非您可以验证正在运行的代码的完整性,否则此方法几乎没用, hard

答案 1 :(得分:3)

您可以存储密码的哈希值(MD5 / SHA1),并将其与提供的密码的哈希值进行比较。

确保从外部计算哈希值,以避免在可执行文件中的任何位置提到原始密码。

答案 2 :(得分:3)

当谈到它时,你已经在程序中写了一个后门。这是一件坏事 - 不要这样做。

就像其他人所说的那样,你可以通过使用哈希来做得更好,但是遗漏了一些关键的东西。当有人猜到密码时,他们会知道每个已安装软件副本的密码。由于密码是硬编码的,没有人能够更改或撤销密码,因此您将在程序中插入一个无人能消除的后门。如果你依赖于与其他资源进行任何通信的密码,你就不可能改变它 - 至少,没有重大的额外工作。

您应该将密码放在外部位置,例如硬件安全模块,密码文件或数据库表。然后,实现完整的密码更改和轮换机制 - 老实说,这应该与您在所有密码中使用的机制非常相似。

答案 3 :(得分:1)

使用hashes the password的函数 - 在源代码中保留密码的哈希值,而不是密码本身。

该页面的引用:

  

相关的应用程序是密码   验证。密码通常是   没有以明文形式存储,显而易见   原因,而是以摘要形式。   要对用户进行身份验证,请输入密码   由用户呈现的是哈希和   与存储的哈希相比。这是   有时也被称为单向   加密。

答案 4 :(得分:0)

如果您要将应用程序存储在用户的移动设备上,您可以做的最好的事情是尝试隐藏密码。我建议做一些哈希算法(可能是SHA1)或密钥派生算法,如PBKDF2,并存储结果而不是与明文密码进行比较。

答案 5 :(得分:-1)

存储哈希而不是密码购买你绝对没有。由于现在是用于验证而不是密码的散列,因此读取源代码(或反转目标代码)将显示散列并允许攻击者进行身份验证。

这些问题的答案总是一样的。如果您使用硬编码的客户端机密,无论您做什么,都无法实现任何可衡量的安全性。你能做的最好的就是混淆,直到你得到一种温暖的模糊感觉它已经足够好了。