【问题标题】:Should I convert my string sha1, in java or php?我应该用java还是php转换我的字符串sha1?
【发布时间】:2016-03-23 17:38:04
【问题描述】:

我正在开发一个具有登录和注册功能的安卓应用程序。我将我的数据库存储在phpMyAdmin。我想将密码存储在sha1。我的应用程序通过php 与数据库通信。
我的问题是,在 phpmyadmin 中,密码列应该是什么类型? Varchar 还是 BINARY(20)? 我应该在java或php中转换密码?哪个更容易? java或php中是否有任何内置方法?我应该使用任何其他加密吗?
我应该使用这个吗?

private static String encryptPassword(String password)
{
    String sha1 = "";
    try
    {
        MessageDigest crypt = MessageDigest.getInstance("SHA-1");
        crypt.reset();
        crypt.update(password.getBytes("UTF-8"));
        sha1 = byteToHex(crypt.digest());
    }
    catch(NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
    catch(UnsupportedEncodingException e)
    {
        e.printStackTrace();
    }
    return sha1;
}

private static String byteToHex(final byte[] hash)
{
    Formatter formatter = new Formatter();
    for (byte b : hash)
    {
        formatter.format("%02x", b);
    }
    String result = formatter.toString();
    formatter.close();
    return result;
}

格式化程序是什么类型的? Java.utiljava.util.logging, android.text.format ?

【问题讨论】:

  • “哪里”:越早越好。 “Sha1 以外”:sha1 已过时,请使用 sha-2 或 sha-3。
  • 无论你做什么,客户端都不应该真正看到存储的哈希(以防止暴力破解)。还建议在散列之前包含(每个用户)静态随机数(以对抗彩虹表,如果任何散列泄漏)。

标签: java php sha1 password-encryption


【解决方案1】:

首先你可能想看看: best-way-to-store-password-in-database

正如某些 cmets 中提到的,您应该知道 SHA-1 已过时。还要注意 SHA-1 是不可逆的。因此,一旦您对用户密码进行哈希处理,“就无法”取回原始密码。

关于您应该在何时何地加密或散列密码。我会在我的 Android 应用程序中执行此操作。这样,当您通过网络发送密码时,密码已经被加密。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多