首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >要生成数字优惠券代码吗?

要生成数字优惠券代码吗?
EN

Cryptography用户
提问于 2016-10-20 14:28:09
回答 2查看 3.2K关注 0票数 1

我们想要生成优惠券代码系列,然后加密这些优惠券代码的数字,这也必须是可解密的。

我们将与客户共享加密代码作为优惠券代码。

这些都是条件:

  1. 加密代码不得串联或不易猜测;
  2. 加密代码必须是数字的。
  3. 加密代码必须有特定数量的数字(例如:大小/长度)。

示例:

我们生成从1到100的优惠券代码(以百万计的需求,plainCode将要么是数字,要么字母数字不重要)。

我们希望将加密的数字优惠券代码与特定数字共享给用户。也就是说,如果代码是52,那么加密的代码给我们10000到99999 (如果指定了5位数字,或者它需要固定的数字数)。

我们也能解密同样的。

注:

  1. 以上只是一个例子。可能性是以百万计的。
  2. 安全不是一个主要问题。只是猜不出来很重要。
  3. 加密代码必须是数字的。

问题:

是否有一种已建立的、加密的安全方法来做到这一点?如果没有,我们需要做些什么来处理这件事?

任何建议或想法都是受欢迎的。

我们已经查过了。任何好的algo,对于同样的建议,返回特定的数字数。我们有一个提供低于指定数字的加密数字,但我们希望在特定的范围内保持不附加0的数字数。

EN

回答 2

Cryptography用户

发布于 2016-10-21 02:18:27

对于我在定制库存系统中使用的位置标识符,我有一个几乎相同的要求。我有一个35位的代码,它显示为7个5位的元素,需要人类的可读性和独特性。生成代码的方法不一定要保留格式,这可能只是所使用算法的副作用。

我使用的方法生成一个7个字符代码,每个字符都是字母数字0-9和A,省略了OIZS,因为它们在视觉上与0125太相似。该算法是一种基于高分组密码圆结构的广义Feistel网络中5位7位元素的分组密码算法。输入是数字序列,输出是伪随机字母数字序列:

代码语言:javascript
复制
JE4HV9W
JPNJ4NE
V20MUP3
QCKCVWU
QTR7FUC
5E94W9J
4HYWH14
9W1229T
PT6JJTV
MEWTT68
91ACL19
....

因为输入序列是数字的,所以对于给定的343.6亿个35位值的可能性,只有1000万个输出组合。这限制了可用于反向工程算法或确定所用密钥的密文数量。该算法简单,但在密钥大小(理论上)的情况下,有足够多的圆环来保证安全。use环境对这种安全性没有要求,但它允许在需要时将其用于其他应用程序。数字输入是安全和可用性的要求,而不是算法的限制。

如果用于生成优惠券码,则可以固定某些输入元素或比特,而这些固定位可以定义优惠券类型或折扣。系统只需跟踪使用过的优惠券代码,并对其进行解码以确定其类型和有效性。仅随机输入的1/3436码将解码为有效输入,有效输入的优惠券数量也可以进一步限制。

例如,您的输入可以构造为XXYYYYZ,其中XX是优惠券类型,YYYY是值,Z是一个固定元素,如0。优惠券01将被分配到5%的折扣,只有100个允许的优惠券使用在到期之前。当进入系统时,它被解码,其结构有效性被确定(为数值和Z=0),XX被确定为有效的优惠券,而YYYY被确定尚未被用于给定的XX。如果满足所有要求,则提供折扣,并节省XXYYYY,以便与进一步的优惠券进行比较。此示例格式中只有0.003%符合所需结构,其中只有1%符合所需的优惠券类型。

如果需要较长的代码,则此类密码的变体很容易在其他大小中生成。40位版本将子字扩展到8位,并显示为8字符代码.通过将5子字7位Feistel结构扩展到6个子字,而48位版本将子字扩展到8位,创建了一个42位版本,显示为6位7位字符代码。

票数 1
EN

Cryptography用户

发布于 2016-10-20 19:42:51

如果我正确地理解了这一点,你想要“加密”一个数字,把它变成另一个数字,并逆转这个过程?我认为这个算法可以用于这个目的,…。

伪码:(您的“从1号到100号”示例)

代码语言:javascript
复制
int i = 1
int key
int max = 100
list(of int) intList
read value for key
do until i = max
if i mod 2 = 0
intList.add(i * (i + key))
else
intList.add(round((i + _key) * i / 3))
end if
i+=1
loop

我在VB中实现了这个算法,得到了一些非常随机的数字https://s22.postimg.org/42m3uoy01/bitmap.jpg

你可以倒转算法来“解密”这些数字。

我没有碰撞(两个数字产生相同的值),但有些非常接近。现在,如果要按长度(甚至是随机排序它们的顺序)对值进行排序,那么就会有相当数量的优惠券可以倒转到它们的初始数量。注意,对于每个数字,最小的加密数不等于最小的解密数等。

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

https://crypto.stackexchange.com/questions/40834

复制
相关文章

相似问题

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