0

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

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

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

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

谢谢

4

3 回答 3

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,除了它们包含二进制字符串而不是非二进制字符串。

按照文档,您可以简单地将您生成的这个新二进制值与表中的值进行比较。

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

于 2013-08-02T11:16:59.287 回答
0

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

于 2013-08-02T11:20:06.473 回答
0

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

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

按照另一个答案中的建议对其进行散列会更好,但仍然不是很好。问题在于,存在所谓的彩虹表,可以使用反向查找散列到其原始值。

您需要做的最低限度是使用加盐哈希(https://en.wikipedia.org/wiki/Salt_(cryptography)),或者更好的是,使用 bcrypt 或 PBKDF2 之类的东西(请参阅Java 中使用 PBKDF2 进行密码验证)来创建用户提供的密码的安全哈希。这些哈希将具有固定长度,并且可以轻松地作为二进制字符串存储在给定的数据库字段中。

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

于 2013-08-02T11:31:34.007 回答