0

我正在使用线性同余生成器生成密钥流,然后我将使用这个密钥流来加密和解密明文。我正在尝试生成 47 个伪随机数,明文将是“Meetmeattownhallatsevenpmforpaymentandbringbear”密钥流的长度需要相同作为明文的长度。然后我们将生成的数字映射到查找字母表中的字母表。

字母表

我正在创建一个 python 脚本来执行线性同余生成器来生成密钥流。我正在尝试加密明文,“准备好下午 5 点在市政厅见面”。我很难做到这一点。我正在使用下面的线性同余生成器的算法

Xn+1 = (aXn + c) mod m

其中 Xn 是伪随机值的序列,并且

• Modulus: m, 0 < m
• Multiplier: a, 0 < a < m
• Increment: c, 0 ≤ c < m
• Seed: X0, 0 ≤ X0 < m

Python代码

# Initialize the seed state
#!/usr/bin/env python#!/usr/bin/env python3
def linearCongruentialGenerator(Xo, m, a, c,randomNums,noOfRandomNums):

# Initialize the seed state
randomNums[0] = Xo

# Traverse to generate required
# numbers of random numbers
for i in range(1, noOfRandomNums):
     
    # Follow the linear congruential method
    randomNums[i] = ((randomNums[i - 1] * a) +
                                     c) % m

#Main function
if __name__ == '__main__':
 
# Seed value
Xo = 27
 
# Modulus parameter
m = 100
 
# Multiplier term
a = 17
 
# Increment term
c = 43

# Number of Random numbers
# to be generated
noOfRandomNums = 47

#Variable to declare the randomnumber
randomNums = [0] * (noOfRandomNums)

#Call the function
linearCongruentialGenerator(Xo, m, a, c,randomNums,noOfRandomNums)

# Print the generated random numbers
for i in randomNums:
    print(i, end = " ")

我希望输出是这样的。

脚本的输出

您能否在线性同余生成器 python 中帮助我生成密钥流以加密和解密明文以及如何将生成的数字映射到明文的字符。

谢谢

4

1 回答 1

0

您的实现Linear Congruential Generator看起来是正确的。


所以剩下的任务是映射。您可以使用zip随机数创建字符映射。

plainttext = "randomtext"

unique = set(plainttext)

random_numbers = [37, 11, 23, 41, 28, 19, 27, 9, 31]

mapping = dict(zip(unique, random_numbers))
print(mapping)
{'o': 37, 'm': 11, 'a': 23, 'e': 41, 'x': 28, 'd': 19, 'r': 27, 'n': 9, 't': 31}
于 2021-05-22T08:31:08.213 回答