gpt4 book ai didi

encryption-symmetric - 如何生成难以猜测的推荐/优惠券代码?

转载 作者:行者123 更新时间:2023-12-04 08:23:02 25 4
gpt4 key购买 nike

我很难想出一种可以创建短(8 个字符)推荐代码的算法。我想使用一种易于内存的模式,其中不可能在代码中出现令人反感的词。我也不希望任何字母与数字混淆——所以没有 1、l、0 和 O。我想出的模式是 aa22aa22 .这种模式基本上是两个字母字符后跟两个数字字符后跟两个字母字符后跟两个数字字符。字母字符都是小写的。这种模式支持超过 40 亿种可能的代码。

现在是棘手的部分。我需要将生成的代码存储在 Salesforce 中。我认为这需要以非随机方式完成,因为如果我随机进行,我必须检查与已生成代码的冲突。这将进入 Salesforce 强加给您的调控器限制。如果您不熟悉调控器限制,这基本上意味着如果您查询数据库的次数过多或者您的进程运行时间过长,则底层系统会抛出调控器限制错误。随机代码创建引入了关于查找与先前创建的代码不冲突的代码需要多少查询的不确定性。所以,现在基本上归结为创建保证永不重复的代码,这意味着按顺序创建它们。顺序方法的问题是代码很容易猜测。

是的,我可以拥有一个非 Salesforce 数据存储,它可以作为记录源并使用随机方法并在那里进行碰撞检查,但我想看看全局社区是否有任何可行的想法。我试图找到一种可以产生 8 个字符密码的弱对称加密算法,但到目前为止我没有运气。

最佳答案

我会选择一种方法,比如使用一些随机数生成器来创建一个不可重复的序列,就像这里建议的那样:https://stackoverflow.com/a/196164/2331592

您必须选择最多支持 [可能的优惠券数量] 组合的生成器。
每次您抽取一个随机数时,您都会得到另一个数字,它是可能的优惠券的索引(--> 排列),可以直接转换为优惠券(但由于您的优惠券数字具有不同的基数,因此并不像更改一样容易数基)

例子:

如果您的代码模式看起来像 a1a那里a代表 [abcde]1[123] .
这将产生 75 个排列。

00 a1a    15 b1a     30 c1a     45 d1a     60 e1a
01 a1b 16 b1b 31 c1b 46 d1b 61 e1b
02 a1c 17 b1c 32 c1c 47 d1c 62 e1c
03 a1d 18 b1d 33 c1d 48 d1d 63 e1d
04 a1e 19 b1e 34 c1e 49 d1e 64 e1e
05 a2a 20 b2a 35 c2a 50 d2a 65 e2a
06 a2b 21 b2b 36 c2b 51 d2b 66 e2b
07 a2c 22 b2c 37 c2c 52 d2c 67 e2c
08 a2d 23 b2d 38 c2d 53 d2d 68 e2d
09 a2e 24 b2e 39 c2e 54 d2e 69 e2e
10 a3a 25 b3a 40 c3a 55 d3a 70 e3a
11 a3b 26 b3b 41 c3b 56 d3b 71 e3b
12 a3c 27 b3c 42 c3c 57 d3c 72 e3c
13 a3d 28 b3d 43 c3d 58 d3d 73 e3d
14 a3e 29 b3e 44 c3e 59 d3e 74 e3e

选择一个简单的 LCG 基于 x = (a*x + c) mod m环境 x = 1 (可以使用任何数字) a = 5 (可以使用任何大数 - 只需确保您的算术不会溢出) c = 0 m = 73
设置 m成为排列计数的下一个最小素数,以确保生成器始终创建有效数字,尽管最后排除了许多有效组合 - 因此该生成器永远不会生成 #73 和 #74,也永远不会生成 # 0 从那时起总是 0被 build

这是生成器输出,直到它再次循环:
01:  5      11: 31      21: 17      31: 47     41: 14    51: 43    61: 33    71: 44
02: 25 12: 9 22: 12 32: 16 42: 70 52: 69 62: 19 72: 1
03: 52 13: 45 23: 60 33: 7 43: 58 53: 53 63: 22 --> 01: 5
04: 41 14: 6 24: 8 34: 35 44: 71 54: 46 64: 37
05: 59 15: 30 25: 40 35: 29 45: 63 55: 11 65: 39
06: 3 16: 4 26: 54 36: 72 46: 23 56: 55 66: 49
07: 15 17: 20 27: 51 37: 68 47: 42 57: 56 67: 26
08: 2 18: 27 28: 36 38: 48 48: 64 58: 61 68: 57
09: 10 19: 62 29: 34 39: 21 49: 28 59: 13 69: 66
10: 50 20: 18 30: 24 40: 32 50: 67 60: 65 70: 38

每次我们得到不同的索引。从该索引我们可以在上表中查找代码,但我们也可以计算它:

我们代码中的数字有不同的值(如在十进制数字系统中,每个数字的值比前一个数字高十倍)
a位置有 5 种可能性和 1有3种可能。
             a3,     a2,    a1
possibilies: 5 3 5
digit value: a3*3*5 a2*5 a1*1
digit value: a3*15 a2*5 a1*1

each of the possibilities has an attached value:

letters a b c d e
value 0 1 2 3 4

numbers 1 2 3
value 0 1 2 <-- this is a bit counter intuitive - but we need to start at 0

e3b --> e≙4 3≙2 b≙1
4*3*5 + 2*5 + 1*1
= 60 + 10 + 1
= 71
code e3b --> #71

另一种方法是从索引中获取代码,而无需查找表。
可以通过将值除以数字值(整数除法)并取该数字的可能性数的模来计算每个数字
#51
a1 = (51 / 1) mod 5 = 1 ≙ b
a2 = (51 / 5) mod 3 = 1 ≙ 2
a3 = (51 / 15) mod 5 = 3 ≙ d

#51 --> code d2b

作为一般提示:
我会将代码的表示与内部编号分离。
示例中的数字将是排列索引。
您只需要知道上次发布的索引,即可生成下一个。

索引的表示方式可能与此无关。在我们的例子中 a1a表示。

需要注意的一些事项:
https://en.wikipedia.org/wiki/Positional_notation用于数字表示
https://en.wikipedia.org/wiki/Linear_congruential_generator学习如何生成器工作以及如何对其进行参数化

关于encryption-symmetric - 如何生成难以猜测的推荐/优惠券代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56329621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com