Jai*_*ime 16 encryption hash encode checksum
我正在开发一个在线活动票务系统,用户可以自行打印他的票据并出现在将被扫描的事件(条形码),理想情况下,这个人会进入.我的问题是如何创建一个满足以下要求的"票证代码":
数据范围非常小,4天内只有大约20个活动,每个活动约5,000张门票(约100,000个不同的门票代码)
现在我有几个字段没有打印在故障单上,用户不知道我可以使用它来编码部分"票证代码",所以我可以使用EventId,OrderId,EventDate和一些盐来创建一个小的"哈希"部分代码(想法?),但我仍然坚持顺序或GUID(太长)的票证ID
那么关于如何做到这一点的任何想法或指示?
Unk*_*own 12
为什么重新发明轮子?做这样的事情(Python代码,问我是否需要澄清):
import hashlib
secretpassword = "blah"
def createticket(eventnum, ticketnum):
    m = hashlib.md5() # or any crypto hash you like
    m.update("%s%s%s" % (eventnum, ticketnum, secretpassword))
    return m.hexdigest()[:10]
例:
活动编号1
机票编号123
createticket(1,123)
# output: 2d7f242597
售票员先生带着他的验证员到场,并输入事件/票号和哈希:
def verifier(eventnum, ticketnum, hash):
    return hash == createticket(eventnum, ticketnum)
verifier(1,123, "2d7f242597")
# ouput: True
考虑一个基于 Feistel 网络的非常简单的方案,用于排列票证 ID 号等。这条消息(恰好出现在 PostgreSQL 列表中,但与 PostgreSQL 没有太大关系)描述了一个简单的Feistel 网络。在每张门票上,您可以打印门票 ID 号(按顺序选择),然后打印“门票密码”,该密码是通过 Feistel 网络输入 ID 号的结果。可能的变化包括在密码上附加一个校验位,以及将 Feistel 网络的输入不仅仅基于顺序生成的数字(数字 + 10,000 * 事件 ID 号等)。