我正在逆向设计一个我一直负责理解的系统。系统使用令牌和半随机[1]时间戳(作为salt)和未知的散列函数来生成用于身份验证的随机密钥。
它产生的字符串长度为64个字符,并且似乎有一个散列模式。例如(基于虚构的输入和不相关长度的输出,因为这个问题是理论):
salt: 135407067754316
token: aaaa.bbbb.cccc.dddd
这会产生:
hash: d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e
然后改变盐:
salt: 13540707209819
token: aaaa.bbbb.cccc.dddd
产地:
hash: d41d9g838fddb275e9800123ecf8427ed41d9g838fddb275e9800123ecf8427e
与第一个哈希值相似(前3个字符始终匹配),其中生成的唯一区别是密钥(半随机时间戳),这使我得出结论:他们正在使用一些使用随机时间戳作为盐的基本哈希。
问题我如何缩小他们加密的方式或使用的功能?我可以导致生成我需要的任意数量的哈希(使用密钥和令牌)但是我不能使用我的令牌和选择键来产生哈希值。结果是64个字符的长度。
如果我有100,200,500,1000,10000,100000个盐,代币和结果的例子,是否存在可以让我强制生成方法的技术?
[1]半随机化意味着他们采用当前时间戳(例如:1354068826)并在末尾添加随机5长度数字,以创建类似135406882613951的内容。
最后请注意,除了基本想法(输入值和盐,获取哈希)之外,我对加密或散列或安全性一无所知。