首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的大写加密算法

简单的大写加密算法
EN

Stack Overflow用户
提问于 2014-02-27 22:31:20
回答 3查看 966关注 0票数 1

我正在使用一个系统来销售比赛的门票。

当前工单id号是连续的。例如: 651,652,653。如果有人要买一张新票,他的票id将是654。

我正在寻找一种解决方案,通过向用户发送字符串而不是票号来通知用户他的门票唯一id,这样他就可以有一个参考,但他不会知道以前购买了多少门票。

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

为了可读性,我需要大写字母,并且新字符串的长度不应该太长,因为那样会很难记住。

我有这样的算法选择吗?我使用PHP作为服务器语言来完成这一切。

EN

回答 3

Stack Overflow用户

发布于 2014-02-27 22:44:47

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

代码语言:javascript
复制
$secret = 123456789;
$tickedID = 654;

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

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

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

输出:

代码语言:javascript
复制
Code is: 75BCFA3
Decoded: 654

免责声明:我同意在数据库中添加唯一的代码来引用实际的标记id。

票数 0
EN

Stack Overflow用户

发布于 2014-02-27 23:31:49

一种选择--你可以计算一个散列(consecutive_number+ salt),然后对散列进行编码。

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

票数 0
EN

Stack Overflow用户

发布于 2017-12-29 04:07:26

互联网上有很多糟糕的建议(还有像“hashids”这样的糟糕设计),但最终你想要的是:

不要这样做:

改为执行以下操作:

图片(和详细的参数)来自:The Comprehensive Guide to URL Parameter Encryption in PHP

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22071516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档