Ошибка алгоритма CRT дает дополнительный вывод - PullRequest
0 голосов
/ 25 мая 2020

Я новичок в 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...