【问题标题】:Predictable ID's to non-predictable short strings in PHP [duplicate]PHP中不可预测的短字符串的可预测ID [重复]
【发布时间】:2012-07-10 03:25:41
【问题描述】:

可能重复:
Short 'encryption/hash' in PHP

对,

我需要制作一个 ID,例如;使用 PHP 将 100000001、100000002、100000003 转换为难以预测的字符串,例如 PDKJ23HB43

  • 必须是字母数字。
  • (如果可能)长度需要为 5-15 个字符。
  • 它必须是可逆的。
  • 它必须是独一无二的。
  • 它不需要是安全的 [我没有用它来“加密”任何东西]
  • (如果可能)不需要数据库来记录映射。
  • 我正在尝试做的事情可能吗?

我认为这将类似于 URL 变成 TinyURL 的方式,但这只是一个模糊的猜测。

我尝试了一些不同的选项,例如 base64,但输出太长(我知道原因,我只是找不到更好的解决方案,因为这是我第一次需要这样做像这样的。

感谢大家的帮助,非常感谢。对不起,如果我问得非常直接,但这是我实现目标的唯一方法。

【问题讨论】:

  • TinyURL 是随机生成的,然后将 tiny url 和原始 URL 存储在一个 db 中。它不是 URL 的“散列”。
  • 所以从 100000001 到 PDKJ23HB43(编码,如果你喜欢)然后从 PDKJ23HB43 回到 100000001(这是原始值)
  • 这很有道理 Rocket - 如果不使用数据库进行映射,我想要实现的目标是否可能?
  • SO 处理这件事的方式让我有点难过。 OP 不清楚他的真正需求,他不应该再问同样的问题。但是第一个应该得到更多建设性的 cmets,以便最终确定真正需要什么。

标签: php decode encode


【解决方案1】:

由于您需要它是可逆的,我建议使用mcrypt。不过,这会带来间接费用。

如果您不想要可预测的 ID,那么为什么不更改您的系统以使用 uniqid() 生成随机 ID?

【讨论】:

  • 感谢 Rawkode,这真的很有帮助。我尝试这样做的原因是因为“可预测”值已经存在并且无法更改
【解决方案2】:

你可以用这个:

echo base_convert(time(), 10, 34).base_convert(rand(), 10, 34);

如果您想要可预测的(非安全)ID,只需在某处存储一个计数并使用

echo base_convert(mycount, 10, 34);

【讨论】:

    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2019-07-03
    • 1970-01-01
    相关资源
    最近更新 更多