在PHP中使用md5()函数直接为我提供字符串。在将字符串保存到数据库之前,我想要执行的操作是,除去0(如果该十六进制的字节表示形式为0,并且该字节表示形式为< 0x10),然后将该字符串保存到数据库中。从md5下降0()PHP如果字节表示小于0x10
我该如何在PHP中做到这一点?
MD5 - PHP - 原始值 - catch12 - 214423105677f2375487b4c6880c12ae - 这是我现在得到的。以下是我希望PHP保存在数据库中的值。
MD5 - 原始值 - catch12 - 214423105677f2375487b4c688c12ae
想知道为什么?我在我的Android应用程序中登录和注册的MD5代码没有附加条件为if ((b & 0xFF) < 0x10) hex.append("0");
的零作品正常。但是该站点中的忘记密码功能是PHP,即当用户重置密码时发生不匹配。下面的JAVA代码。
byte raw[] = md.digest();
StringBuffer hexString = new StringBuffer();
for (int i=0; i<raw.length; i++)
hexString.append(Integer.toHexString(0xFF & raw[i]));
v_password = hexString.toString();
在PHP方面的任何帮助,以便不匹配不会发生将非常有帮助。我无法更改应用程序代码,因为这会对现有用户造成问题。
谢谢。
为什么你要这么做? – yan 2011-03-31 15:50:33
@yan,否则由应用程序和PHP的Java代码生成的MD5将是不匹配的,用户将无法登录。我知道我不应该在应用程序中追加0。 – Aakash 2011-03-31 15:53:50
我真的会尝试修复这个正确的方法。首先,修复Java代码。然后,让PHP将密码散列作为适当的32字节MD5字符串发送。当使用密码进行检查时,如果存储的密码少于32个字符,请根据以下答案之一更改发送的散列PHP。如果散列匹配,则将数据库中的散列更新为适当的32个字符。随着时间的推移,这将更正所有密码哈希值,并且可以将整个事情放在你身后。 – Matthew 2011-03-31 16:28:11