如何将mysql中的二进制文件与JAVA进行比较

时间:2013-08-02 11:11:17

标签: java mysql

我有一个数据库,其中一个列(密码)数据类型是二进制(60)。

我在java中使用密码作为STRING并尝试将来自java(来自用户界面)的密码与MySQL中的密码(作为二进制文件)进行比较。

但它从来没有给我任何结果..

请指导哪些数据类型/值能够与二进制类型进行比较

谢谢

3 个答案:

答案 0 :(得分:0)

我很困惑你为什么使用二进制类型,但你可以尝试:

String password = "a password";
// Run password through cryptographic functions.
String binaryStr = "";

for(char c : password)
{
    int charInt = (int)c;
    // Convert the character to it's integer representation.
    binaryStr += Integer.toBinaryString(charInt);
    // Convert that integer into a binary string.
}
  

BINARY和VARBINARY类型与CHAR和VARCHAR类似,只是它们包含二进制字符串而不是非二进制字符串。

根据文档,您只需将您生成的新二进制值与表中的值进行比较。

但是,请记住,这是存储密码的一种非常奇怪的方式,并且存储消息摘要更有意义(假设以二进制形式存储它提供额外的安全性)。

答案 1 :(得分:0)

您应该在MySQL中将字段设置为PASSWORD。就像那样,只要在db中保存密码,密码就会在MD5中进行哈希处理。要在用户登录时进行比较,您只需将用户给定的密码哈希到MD5,并对存储在DB中的密码进行字符串比较。

答案 2 :(得分:0)

将数据库字段配置为二进制字符串可能并不理想,但也不是问题。

问题但是,您打算直接在那里存储密码。请不要这样做,因为它会造成重大的安全漏洞。

按照另一个答案的建议散列它更好,但仍然不是很好。问题是,有所谓的彩虹表,可以使用反向查找哈希值到原始值。

您需要做的最小事情是使用salted哈希(https://en.wikipedia.org/wiki/Salt_(cryptography)),甚至更好,使用类似bcrypt或PBKDF2(请参阅Password Verification with PBKDF2 in Java)的内容来创建用户提供的密码的安全哈希。这些哈希值具有固定的长度,可以很容易地存储为给定数据库字段中的二进制字符串。

检查用户条目时,只需再次执行相同的功能,并将其与数据库内容进行比较。当然,您必须使用SSL将密码从客户端传输到服务器。