【发布时间】: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.util 或 java.util.logging, android.text.format ?
【问题讨论】:
-
“哪里”:越早越好。 “Sha1 以外”:sha1 已过时,请使用 sha-2 或 sha-3。
-
无论你做什么,客户端都不应该真正看到存储的哈希(以防止暴力破解)。还建议在散列之前包含(每个用户)静态随机数(以对抗彩虹表,如果任何散列泄漏)。
标签: java php sha1 password-encryption