【问题标题】:How to not hardcode my password (Android)?如何不对我的密码进行硬编码(Android)?
【发布时间】:2012-03-12 14:40:46
【问题描述】:

在我的应用程序中,我通过电子邮件发送错误报告。我听说在这里硬编码我的密码不安全,我该如何保护它?

写入我的 /res/values 然后从那里读取就足够了吗?

这样做的原因是我不会使用内部电子邮件应用程序。然后用户退出我的应用程序,这不是很好,因为他可能不会回来

GMailSender sender = new GMailSender("my_emailadress@gmail.com", "my_password");
sender.sendMail("Bugreport", 
                currentQuestion.getID(),   
                "my_emailadress@gmail.com",   
                "my_emailadress@gmail.com"); 

请帮助我。 谢谢

【问题讨论】:

标签: android email passwords gmail hardcode


【解决方案1】:

您可以使用 SHA 加密来加密您的密码:

以下是使用 SHA 加密的代码:

import java.io.UnsupportedEncodingException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 

public class AeSimpleSHA1 { 

    private static String convertToHex(byte[] data) { 
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < data.length; i++) { 
            int halfbyte = (data[i] >>> 4) & 0x0F;
            int two_halfs = 0;
            do { 
                if ((0 <= halfbyte) && (halfbyte <= 9)) 
                    buf.append((char) ('0' + halfbyte));
                else 
                    buf.append((char) ('a' + (halfbyte - 10)));
                halfbyte = data[i] & 0x0F;
            } while(two_halfs++ < 1);
        } 
        return buf.toString();
    } 

    public static String SHA1(String text) 
            throws NoSuchAlgorithmException, UnsupportedEncodingException  { 
        MessageDigest md;
        md = MessageDigest.getInstance("SHA-1");
        byte[] sha1hash = new byte[40];
        md.update(text.getBytes("iso-8859-1"), 0, text.length());
        sha1hash = md.digest();
        return convertToHex(sha1hash);
    } 
}

【讨论】:

  • 他不能使用密码学,因为他想将自己的密码存储在应用程序中,而无需在运行时输入。
  • 好吧-也许有办法,但我不知道该怎么做。如果要在运行时加密,则必须将 PW 存储在应用程序中
  • 只是为了明确一点:SHA 是哈希函数族,而不是加密算法。对哈希进行硬编码与对 psw 本身进行硬编码一样糟糕。您不受反编译器的保护。
【解决方案2】:

如果您将密码放入您的应用程序,则没有真正安全的方法可以保护您的密码。最少要做的事情是创建一个单独的帐户,因此它与您的真实帐户没有关联。

除此之外,我建议根本不要使用这种方法。使用内置邮件应用程序并没有那么糟糕。这样用户就会知道,他正在为使您的应用程序变得更好做出贡献,这是一件好事。

第三种可能性是制作一个网页来提交错误并在发生错误时在您的应用中发送 HTTP 请求。但是,请让用户知道,否则他可能会认为您在监视他。

还有就是内置了android的崩溃报告机制,所以你根本不用做任何事情。

【讨论】:

  • 嗨,谢谢。我不会在后台发送它,它是一个警报对话框,用户必须确认错误报告已发送给我。所以没有间谍。是的,我可以用第二封电子邮件来做这件事,这将是一个非常简单的解决方案。但是当我的应用程序变得更受欢迎时,我可能会更改内容并通过 HTTP 请求发送。
猜你喜欢
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 2021-01-01
  • 2017-11-25
  • 1970-01-01
相关资源
最近更新 更多