Я новичок в Stack Overflow. Я использую этот код CRT для шифрования текстового файла. Я получаю дополнительные 234 в encrypt.txt
при каждом шифровании. шифрование буквы «s» дает мне значения 48 и 234, в то время как я должен получить только 48, а этого не происходит в других системах. Я застрял на этом какое-то время и буду признателен за любую помощь.
from functools import reduce
def chinese_remainder(n, a):
sum=0
p=0
prod=1
for i in range(len(n)):
prod = prod * n[i]
for j in range(len(n)):
p = prod/n[j]
sum=sum + a[j]* mul_inv(p, n[j])*p
return sum % prod
def mul_inv(a, b):
b0= b
x0, x1= 0,1
if b <= 1: return 1
while a>1 :
q=a// b
a, b= b, a%b
x0, x1=x1 -q *x0, x0
if x1<0 : x1+= b0
return x1
ifile = "input.txt"
nfile = "encryptd.txt"
k1=[2,5,7,9,1]
k2 =[3,4,7,6,2]
k3=[1,3,6,8,5]
m1=3
m2=5
m3=17
i=0
j=0
k=0
z=1
with open(ifile, "r") as file:
# read all file data
file_data = file.read()
print(file_data)
for car in file_data:
# encrypt data
print(car)
print("*******")
lad1=ord(car) % m1
lad2=ord(car) % m2
lad3=ord(car) % m3
i1= (lad1 + k1[0]) % m1
print("k1 = ",k1 )
o1=k1[0]
mid1=int(len(k1)/2)
ele1 = k1[mid1]
for z1 in range(len(k1)):
k1[z1-1]=k1[z1]
k1[z1]= (o1 + ele1)%10
print("Updated keys ")
print("k1 after update = ",k1)
i2= (lad2 + k2[0]) % m2
print("k2 = ",k2)
o2=k2[0]
mid2=int(len(k2)/2)
ele2 = k2[mid2]
for z2 in range(len(k2)):
k2[z2-1]=k2[z2]
k2[z2]= (o2 + ele2)%10
print("Updated keys ")
print(k2 )
#updat(k2)
i3= (lad3 + k3[0]) % m3
print("k3 = ",k3)
o3=k3[0]
mid3=int(len(k3)/2)
ele3 = k3[mid3]
for z3 in range(len(k3)):
k3[z3-1]=k3[z3]
k3[z3]= (o3 + ele3)%10
print("Updated keys ")
print(k3 )
# updat(k3)
n=[m1,m2,m3]
a=[i1,i2,i3]
out=int(chinese_remainder(n,a))
#enctx=chr(out)
print(i1,i2,i3,out)
# write the encrypted file
st = str(out)
with open(nfile, "a") as file:
file.write(st)
file.write(";")
file.write("\n")