唯一密钥生成逻辑

Posted

技术标签:

【中文标题】唯一密钥生成逻辑【英文标题】:Unique Key Generation Logic 【发布时间】:2012-04-09 06:10:15 【问题描述】:

由于没有更好的术语,我计划构建一个多用户客户关系经理 (CRM),我想创建一个唯一标识符,该标识符易于通过电子邮件、文本和口头传输给其他团队成员.

例如:

我上传了我的 100 位客户列表,John Smith 和他的电话号码包含在该列表中。上传后,我想在数据库中为 John Smith 生成一个隐藏的指纹/唯一标识符,然后传播一个可以公开共享的 12 位数字。

在我看来是这样的 - john smith + ph: 5557898095 = 指纹:7e013d7962800374e6e67dd502f2d7c0 显示到最终用户 ID 号:103457843983

我的问题是 - 我应该使用什么方法或过程来获取姓名和电话号码,生成隐藏密钥,然后转换为链接到隐藏密钥的可显示密钥?

我希望这清楚。我主要是想用正确的逻辑流程。

【问题讨论】:

您真的要根据电话号码来识别 ID 吗?如果客户的电话号码发生变化怎么办? 为什么需要这个?当一个简单的整数 id(由 mysql 自动生成)服务器时,似乎需要付出很多努力 - 比任何任意 12 位数字更具人类可读性,并且作为数据库索引键更好。 【参考方案1】:

您可以使用 crc32('fingerprint') 作为最终用户 ID 号:

<?php 
  echo printf("%u", crc32('7e013d7962800374e6e67dd502f2d7c0')); //226407465310
?>

【讨论】:

【参考方案2】:

我不明白你的问题到底是什么,但我会试试。

你的意思好像是这样的:

一个保存公共和私有 ID(可能还有其他东西)的 SQL 表。

您可以像这样生成密钥:

$chars = '0123456789abcedfghijklmnopqrstuvwxyz';

function generateKey($length, $charsLength = 10) 
    global $chars;
    
    $key = '';

    for($i=0;$i<$length;++$i) 
        $key .= $chars[rand(0, $charsLength - 1)];
    
    
    return $key;


$keyPublic = generateKey(10); // Public key with length 10

// Now check if the key already exist
while(mysql_num_rows(mysql_select('SELECT publicKey FROM keys WHERE publicKey = \''.$keyPublic.'\')) === 1) 
    $keyPublic = generateKey(10);


$keyPrivate = generateKey(10, 36); // Private key with length 10

// Now check if the key already exist
while(mysql_num_rows(mysql_select('SELECT privateKey FROM keys WHERE privateKey = \''.$keyPrivate.'\')) === 1) 
    $keyPrivate = generateKey(10, 36);

在此示例中,生成了两个密钥,并检查密钥是否已存在。 (在“键”表中的示例中)。

【讨论】:

谢谢 - 这为我需要完成的工作提供了正确的方向:)【参考方案3】:

假设您的真实 ID 是您客户表中的 auto_incremented 字段,那么只需有第二个表将您的公共 ID 映射到真实 ID。

假设您使用某种散列算法来生成您的公共 ID,当您创建新用户以检测与现有用户的冲突然后重新生成时,在该表上进行查找将是一个简单的过程一个新的 ID,直到没有冲突(例如,将系统时间作为哈希输入的一部分,然后继续重新生成,直到找到唯一的 ID)

【讨论】:

也很有帮助,谢谢。我知道我的问题有点含糊,但在你和@user1150525 之间,我现在有完成我的规范文档所需的东西。谢谢!

以上是关于唯一密钥生成逻辑的主要内容,如果未能解决你的问题,请参考以下文章

License 许可序列号编译逻辑?

Java使用AES加解密

为银行交易生成唯一密钥

Java中的序列密钥生成和验证(机器唯一标识符)

如何处理相同的哈希与相同的密钥?

可以将服务器端逻辑添加到 firebase 以实现自动增量密钥吗?