如何使用 PN 序列将明文加密为密文?
How to encrypt plaint text to cipher text using PN Sequence?
我正在尝试创建一个使用 PN 序列将纯文本加密为密文的函数。
但我不知道该怎么做。有人有任何类型的算法可以帮助我创建一个可以帮助我构建加密函数的函数吗?
这段代码使用LFSR
移位寄存器得到一个伪随机序列然后用明文异或得到密文。该代码使用 pylfsr
和 numpy
.
from pylfsr import LFSR
# The initial state
state = [0,0,0,1,0,1,0,1,0,1,1]
# The LFSR polynomial use a primitive polynomail to get maximum period length
poly = [5, 4, 3, 2]
l = LFSR(fpoly=poly, initstate =state)
message = b"This is a Test Message"
ciphertext = b""
# generate all LFSR sequence
allseq = l.runFullCycle()
seq = ""
seq_index = 0
# Convert LFSR bits into a string
for x in allseq:
seq += str(x)
for counter in range(len(message)):
ran_seq = seq[seq_index: seq_index+8]
# Now encrypt by XOR convert to bytes and append to ciphertext
ciphertext += bytes([int(message[counter]) ^ int(ran_seq, 2)])
seq_index += 8 # Move sequence to Next byte
print(ciphertext)
plaintext = b""
# Reset The LFSR sequence to start from beginning
seq_index = 0
for counter in range(len(ciphertext)):
ran_seq = seq[seq_index: seq_index+8]
plaintext += bytes([int(ciphertext[counter]) ^ int(ran_seq, 2)])
seq_index += 8
print(plaintext)
我正在尝试创建一个使用 PN 序列将纯文本加密为密文的函数。 但我不知道该怎么做。有人有任何类型的算法可以帮助我创建一个可以帮助我构建加密函数的函数吗?
这段代码使用LFSR
移位寄存器得到一个伪随机序列然后用明文异或得到密文。该代码使用 pylfsr
和 numpy
.
from pylfsr import LFSR
# The initial state
state = [0,0,0,1,0,1,0,1,0,1,1]
# The LFSR polynomial use a primitive polynomail to get maximum period length
poly = [5, 4, 3, 2]
l = LFSR(fpoly=poly, initstate =state)
message = b"This is a Test Message"
ciphertext = b""
# generate all LFSR sequence
allseq = l.runFullCycle()
seq = ""
seq_index = 0
# Convert LFSR bits into a string
for x in allseq:
seq += str(x)
for counter in range(len(message)):
ran_seq = seq[seq_index: seq_index+8]
# Now encrypt by XOR convert to bytes and append to ciphertext
ciphertext += bytes([int(message[counter]) ^ int(ran_seq, 2)])
seq_index += 8 # Move sequence to Next byte
print(ciphertext)
plaintext = b""
# Reset The LFSR sequence to start from beginning
seq_index = 0
for counter in range(len(ciphertext)):
ran_seq = seq[seq_index: seq_index+8]
plaintext += bytes([int(ciphertext[counter]) ^ int(ran_seq, 2)])
seq_index += 8
print(plaintext)