简单的大写加密算法

问题描述 投票:1回答:3

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

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

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

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

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

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

php security encryption
3个回答
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。


0
投票

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

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


0
投票

互联网上有很多不好的建议(以及像“哈希”这样糟糕的设计),但最终你想要的是:

Don't do this:

Encryption

改为:

Use a random lookup

图片(和详细论据)来自:The Comprehensive Guide to URL Parameter Encryption in PHP

© www.soinside.com 2019 - 2024. All rights reserved.