如何匹配数据库中所有储存的指纹保 存在字节C#

问题描述 投票:-1回答:1

我可以通过使用SQL查询“其中id”相匹配的指纹。但我要的是找出数据库的所有指纹。

我用zk4500指纹扫描仪。 mysql的C#。对不起,我的英语和解释我只是个新手..

if (bIdentify)
{

    if (userid.Text == string.Empty)
    {
        return;
    }
    // int ret = zkfp.ZKFP_ERR_OK;

    int fid = 0, score = 0;
    mysqlConn.Open();
    MySqlCommand cmd1 = mysqlConn.CreateCommand();
    cmd1.CommandText = (@"select * from emp_fingerprint where emp_id=?emp_id");
    //cmd1.Parameters.AddWithValue("?fingerprint_1", dbfp);
    cmd1.Parameters.AddWithValue("?emp_id", userid.Text);
    MySqlDataAdapter da = new MySqlDataAdapter(cmd1);
    DataTable dt = new DataTable();
    da.Fill(dt);
    dr = cmd1.ExecuteReader();
    while (dr.Read())
    {

        byte[] dbfp = new byte[2048];

        dbfp = (byte[])(dr["fingerprint_1"]);
        string a = dr["emp_id"].ToString();
        dr.Close();
        mysqlConn.Close();

        int match = zkfp2.DBMatch(mDBHandle, CapTmp, dbfp);

        if (match > 0)
        {

            textBox1.Text = "Identify success, percent= " + match + "%";

            break;
        }
        else
        {
            textBox1.Text = "Identify fail, percent= " + match + "%";
            return;
        }
    }
}

我的主要问题是我不知道如何存储在数据库中的指纹扫描仪返回的字节数,然后查询这些字节得到他们属于太用户

c# mysql fingerprint
1个回答
1
投票

首先

我觉得你的数据库结构,或许应该包含一个外键,用户表FingerPrint表。这将允许你存储多个指纹和路线的一个用户。

其次

我不认为你可以通过二进制数据的查询表,除非其作为字符串存储。

所以(我不知道如何安全的,这是),你很可能哈希你的手指印和散列存储在指纹表中的指纹字节以及用户数据库的PrimaryKey

using(SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
    hash = Convert.ToBase64String(sha1.ComputeHash(byteArray));
}

当你想查找一个指纹就可以轻松散列的指纹数据,查询您的指纹表的散列并返回结果。你也可以仔细检查你的指纹字节与返回(在内存中),只是要确定的结果。

这一切的结果会给你的主键的用户表。

一旦你的用户的主键,你就可以查询你的用户ID(主键)用户

更新

假设你有一个指纹表

Id     // Primary Key
UserId // Foreign key
Hash
FingerPrintData

方法获取哈希

public string GetHashFromFingerPrintData(byte[] fingerPrintData)
{
    using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
    {
        return Convert.ToBase64String(sha1.ComputeHash(fingerPrintData));
    }
}

方法比较指纹字节

public bool DoFingerPrintsMatch(byte[] a1, byte[] b1)
{
    var i = 0;
    if (a1.Length != b1.Length)
    {
        return i == a1.Length;
    }

    while ((i < a1.Length) && (a1[i] == b1[i]))
    {
        i++;
    }

    return i == a1.Length;
}

方法来获取用户ID

public int GetUserId(byte[] fingerPrintData)
{
    var connStr = "...";
    var conn = new MySqlConnection(connStr);
    var userId = -1;
    try
    {
        conn.Open();

        var sql = "SELECT UserId, FingerPrintData FROM FingerPrint WHERE Continent = @FingerPrintHash";
        var command = new MySqlCommand(sql, conn);
        command.Parameters.AddWithValue("@FingerPrintHash", fingerPrintData);
        var reader = command.ExecuteReader();

        while (reader.Read())
        {
            byte[] data = reader["FingerPrintData"];
            userId  = reader["UserId"];

            if (DoFingerPrintsMatch(fingerPrintData, data))
            {
                break;
            }

        }

        reader.Close();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
    finally
    {
        conn.Close();
    }


    return userId;
}

免责声明:这是完全未经测试,但肯定这应该能够指出你在正确的方向,而无需编写代码,你

© www.soinside.com 2019 - 2024. All rights reserved.