简单的大写加密算法

时间:2014-02-27 14:31:20

标签: php security encryption

我正在使用系统销售游戏门票。

故障单的当前ID号是连续的。 EG:651,652,653。如果有人会买新票,他的票号是654。

我正在寻找一个解决方案,通过向他发送一个字符串而不是票号来告知用户他的票证唯一ID,以便他可以有参考,但他不知道之前购买了多少票。 / p>

通过加密票号651我想生成一个最大为6-7个字符的字符串,全部为大写,并且该算法应该是双向的,并且只能使用密钥进行反转。 EG:使用像881hu这样的密钥并加密数字651我应该得到像UTR8N1A0这样的东西。

我想要大写字母以便于阅读,新字符串的长度不应太长,因为这样很难记住。

我有这种算法的选择吗?我正在使用PHP作为服务器语言。

3 个答案:

答案 0 :(得分:0)

我同意@ RaggaMuffin-420评论,这样你最多可以有6到7个大写字符。对于像 mcrypt 这样的东西,没有简单的方法可以在6-7个字符中进行... 当然,如果你不想做一些愚蠢的事情:

$secret = 123456789;
$tickedID = 654;

$code = strtoupper( dechex($secret + $tickedID) );

echo 'Code is: ' . $code . '<br>';

$decode = hexdec($code) - $secret;
echo 'Decoded: ' . $decode;

<强>输出:

Code is: 75BCFA3
Decoded: 654

免责声明:我会将数据库引用中的唯一代码添加到实际的滴答ID中。

答案 1 :(得分:0)

一个选项 - 您可以计算散列(consecutive_number + salt)然后对散列进行编码。

更新:如果您需要快速提取原始的连续编号,请将其隐藏在编码的哈希字符串中。您可以阅读它,并且可以通过重新计算哈希来验证它(因为盐是秘密的,人们将无法轻松计算哈希来构造有效密钥)。

答案 2 :(得分:0)

互联网上出现了很多糟糕的建议(以及像#34; hashids&#34;这样的糟糕设计),但最终你想要的是:

不要这样做:

Encryption

请改为:

Use a random lookup

来自The Comprehensive Guide to URL Parameter Encryption in PHP

的图像(和详细参数)