gpt4 book ai didi

python - 从种子生成确定性和非均匀的长字符串

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:30 25 4
gpt4 key购买 nike

我有一个关于加密的奇怪想法,我想尝试一下,它可能很糟糕,而且以前可能已经做过,但我只是为了好玩。这个问题的简短版本是:是否有可能从一个小种子生成一个长的、确定性的和非均匀分布的数字字符串/序列?

长(呃)版本:我正在考虑通过更改编码来加密文本。新编码将通过霍夫曼算法生成。为了很好地工作,霍夫曼算法需要一个相当长的非均匀分布的文本。然后字符可以有不同的位长度,这将是这种加密的主要强度。问题是每次要解密文本时输入/记住长文本是不切实际的。所以我想知道是否可以从密码种子生成文本?

文本是什么并不重要,只要它的字符分布不均匀,并且每次给它相同的种子时都可以重新创建完全相同的序列。最好是,Python 中是否有任何函数/扩展可以做到这一点?

编辑:扩展不同位长的“强度”:如果我有一个字符串“test”,ASCII 值为 116、101、115、116,它给出的位值为1110100 1100101 1110011 1110100

然后,假设我的霍夫曼算法生成的编码如下 t = 101 e = 1100111 s = 10001

最后的字符串是101 1100111 10001 101,如果我们将其编码回 ASCII,我们将得到 1011100 1111000 1101000,这是 3 个完全不同的字符,它是“\xh”。显然不可能对此执行任何类型的频率分析或类似的东西。

最佳答案

这是一个基于random模块的解决方案,如果给定相同的种子,它会生成相同的序列。

import random
from string import ascii_lowercase
from collections import Counter

seed_value = 3334
string_length = 50
random.seed(seed_value)
seq = [(x,random.randint(1,10)) for x in ascii_lowercase]
weighted_choice = lambda s : random.choice(sum(([v]*wt for v,wt in s),[]))
random_list = [weighted_choice(seq) for x in range(string_length)]
print("".join(random_list))
print("Test non uniform distribution...")
print(Counter(random_list))

关于python - 从种子生成确定性和非均匀的长字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19537670/

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