【发布时间】:2013-09-15 09:52:14
【问题描述】:
我正在尝试开发新版本的 Unicenta opos _ 它是一个 Openbravo 开源项目 _ 在 android 平台上工作,我几乎完成了,但我仍然有一些密码部分的问题。
我的问题是: Unicenta opos 使用 Sha1 加密将密码保存在 mysql 数据库中,所以当我尝试在我的 android 应用程序中执行相同操作时,它没有为我提供相同密码的相同加密,然后我做了什么;我查找了 Unicenta 代码源,然后我拿起了加密代码并将其放在我的应用程序中;
来自unicenta代码源的加密函数:
public static String hashString(String sPassword) {
if (sPassword == null || sPassword.equals("")) {
return "empty:";
} else {
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(sPassword.getBytes("UTF-8"));
byte[] res = md.digest();
return "sha1:" + StringUtils.byte2hex(res);
} catch (NoSuchAlgorithmException e) {
return "plain:" + sPassword;
} catch (UnsupportedEncodingException e) {
return "plain:" + sPassword;
}
}
}
所以很明显,这个函数将字符串作为参数(密码)并返回(密码加密)
但问题是,当我尝试使用 unicenta opos 加密密码(例如(0000)时)它给了我:(sha1:B6589FC6AB0DC82CF12099D1C2D40AB994E8410C) 和我的 android 应用程序使用与 unicenta 相同的方法,它给了我另一个哈希 (sha1:39dfa55283318d31afe5a3ff4a0e3253e2045e43)
对不起,如果有人感兴趣,我希望!
谢谢你
【问题讨论】:
-
如果您不加盐,请不要使用简单的哈希算法来存储密码特别是。检查 Unicenta opos 的散列输出是否一致(多次运行的散列相同),因为它可能会在散列之前对数据进行加盐处理。 '0000' 的“正确”纯 SHA-1 摘要确实是 '39dfa55283318d31afe5a3ff4a0e3253e2045e43'。
标签: java android encryption hash passwords