Уведомления

Группа в Telegram: @pythonsu

#1 Июль 30, 2015 02:48:46

omon3
Зарегистрирован: 2015-07-16
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти в цикле ошибку(логика либо синтаксис)

Короче задачка состоит в построении таблиц для линейного криптоанализа. Фактически я все сделал, кроме самого главного подсчета линейного статистического аналога Q (элементы массива Q).Проблема либо в логике либо в синтаксисе. Кто не в теме или забыл, объясню просто, как считается каждый линейный статистический аналог Q

ВАЖНО!Все числа альфа, бэтта, Вход и Выход - это двоичные числа (но для удобства написании программы я работал в десятичной системе счисления, которой ИМИТИРОВАЛ двоичные числа)

Берется альфа (A) и вход (с), если в альфе(A) есть 1цы, то из Входа © берутся с этих же позиций цифры, которые ксорятся между собой:
Например(3 примера):
1) A=0101 Вход = 0000 Результат1 1 = 0 XOR 0 =0
2) A=0101 Вход = 0100 Результат1 2 = 1 XOR 0 =1
3) A=0101 Вход = 1111 Результат1 3= 1 XOR 1 =0

ДАЛЕЕ
тоже самое проделываем с бэттой (B) и Выходом(g) (ну только в БЭТТЕ И В ВЫХОДЕ 3 цифры в числе) и записываем полученное число в Результат2
Например:
1) B=011 Выход = 001 Результат2 1 = 0 XOR 1 =0
2) B=001 Выход = 111 Результат2 2 = 1 = 1

В ИТОГЕ
Q1=Результат1 1 XOR Результат2 1=0 XOR 0 = 0
Q2=Результат1 2 XOR Результат2 2=1 XOR 1 = 0

Тоесть получить в идеале нужно 15 таблиц Q, размером 16 на 15, НО я упростил пока немного задачу и нужно ВЕРНО построить таблицу только для B=001.

ПРИМЕР того что должно получится посмотрите пожалуйста в прикрепленном файле
ВСЕ массивы альфы, бэтты, Входа, Выхода построены ВЕРНО, проблемный кусок кода я выделил

a = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]#вспомогательный массив
b = [[0] for i in range(16)]#вспомогательный массив
c = [[0] for i in range(16)]#вход
g = [[0] for i in range(16)]#выход
B = [[0] for i in range(15)]#бэтта
A = [[0] for i in range(15)]#альфа
Q = [[0] for i in range(15)]#самое главное
hel = [['Вход'],['Выход'],['Q']*15]#вспомогательный массив
print('_______')
#ВСЕ ЧТО НИЖЕ ПРАВИЛЬНО
for i in range (16):#1-2 пункт
    b[i]=bin(a[i])
for i in range (16):
    c[i]=str(b[i])
    d = len(str(b[i]))
    if d == 3:
        g[i] = [0,0,int(c[i][2])]
        c[i] = [0,0,0,int(c[i][2])]
    if d == 4:
        g[i] = [0,int(c[i][2]),int(c[i][3])]
        c[i] = [0,0,int(c[i][2]),int(c[i][3])]
    if d == 5:
        g[i] = [int(c[i][2]),int(c[i][3]),int(c[i][4])]
        c[i] = [0,int(c[i][2]),int(c[i][3]),int(c[i][4])]
    if d == 6:
        g[i] = [int(c[i][3]),int(c[i][4]),int(c[i][5])]
        c[i] = [int(c[i][2]),int(c[i][3]),int(c[i][4]),int(c[i][5])]
    B[i-1]=g[i]
    A[i-1]=c[i]#1-2 пункт
g = [g[1],g[5],g[1],g[4],g[2],g[6],g[6],g[3],g[4],g[5],g[6],g[7],g[2],g[2],g[3],g[7]]    
x1=0
x2=0
y1=0
y2=0
#ВСЕ ЧТО ВЫШЕ ПРАВИЛЬНО
#ПРОБЛЕМНЫЙ КУСОК КОДА НИЖЕ
for i in range (16):
    for j in range (15):
        for s in range (3):
            if A[j][s] == 1 and  A[j][s]==c[i][s]:
                x1=x1+1
                if (x1%2)==0:
                    x2 = 0
                else:
                    x2 = 1
            else:
                x2 = 0
        x1 = 0
        for t in range (2):
            if B[0][t]==1 and B[0][t]==g[i][t]:
                y1=y1+1
                if (y1%2)==0:
                    y2 = 0
                else:
                    y2 = 1
            else:
                y2 = 0
        y1 = 0 
        Q1[i][j] = x2^y2
#ПРОБЛЕМНЫЙ КУСОК КОДА ВЫШЕ
#Ниже вывод информации
print ('A =')        
for j in range (15):
    print(A[j])
for z in range (1):
    print ('B =',B[z])#
    for i in range (16):
        print (c[i],g[i],Q[i]) 
print('_______')#(5 пункт)

ПОДПРАВИЛ НЕМНОГО ПРОБЛЕМНЫЙ КУСОК

Отредактировано omon3 (Июль 30, 2015 20:03:18)

Прикреплённый файлы:
attachment аналог.txt (5,0 KБ)

Офлайн

#2 Июль 30, 2015 06:55:01

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Найти в цикле ошибку(логика либо синтаксис)

Зевните где-нибудь двоеточие - увидите как выглядит синтаксическая ошибка. Логику разбирать пока некогда.

Офлайн

#3 Июль 30, 2015 20:07:17

omon3
Зарегистрирован: 2015-07-16
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти в цикле ошибку(логика либо синтаксис)

Какой то бред происходит с циклами
for s in range (3):
и
for t in range (2):
ОНИ ПОЧЕМУ ТО СЧИТАЮТ t и s только ДО 1 и 2 соответственно, ВМЕСТО положенных 2 и 3. Из-за этого и не работает нормально.
Подскажите причину??

#ПРОБЛЕМНЫЙ КУСОК КОДА НИЖЕ
for i in range (16):
    for j in range (15):
        for s in range (3):
            if A[j][s] == 1 and  A[j][s]==c[i][s]:
                x1=x1+1
                if (x1%2)==0:
                    x2 = 0
                else:
                    x2 = 1
            else:
                x2 = 0
        for t in range (2):
            if B[0][t]==1 and B[0][t]==g[i][s]:
                y1=y1+1
                if (y1%2)==0:
                    y2 = 0
                else:
                    y2 = 1
            else:
                y2 = 0
        Q1[i][j] = x2^y2
#ПРОБЛЕМНЫЙ КУСОК КОДА ВЫШЕ

Офлайн

#4 Июль 30, 2015 20:24:16

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Найти в цикле ошибку(логика либо синтаксис)

omon3
ОНИ ПОЧЕМУ ТО СЧИТАЮТ t и s только ДО 1 и 2 соответственно, ВМЕСТО положенных 2 и 3.
Это кто ж вам так положил то?
ДОКА



Офлайн

#5 Июль 30, 2015 20:56:04

omon3
Зарегистрирован: 2015-07-16
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти в цикле ошибку(логика либо синтаксис)

FishHook
понял)) затупил

Офлайн

#6 Июль 30, 2015 23:13:36

omon3
Зарегистрирован: 2015-07-16
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти в цикле ошибку(логика либо синтаксис)

появился ещё один затуп:

a=[0,1,1,1]
b=[0,1,1,0]
x=0
for i in range (4):
   if  b[i]==1 and b[i]==a[i]:
       x=x+1
       if (x%2)>0:
            x1=1
print(x,x1)

ПОЧЕМУ X1 равно 1 В ИТОГЕ???
Ведь целочисленное деление 2х на 2 ЭТО НУЛЬ

Офлайн

#7 Июль 30, 2015 23:19:06

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Найти в цикле ошибку(логика либо синтаксис)

omon3
Ведь целочисленное деление 2х на 2 ЭТО НУЛЬ
Может быть там не 2?

Офлайн

#8 Июль 30, 2015 23:20:21

omon3
Зарегистрирован: 2015-07-16
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти в цикле ошибку(логика либо синтаксис)

для этого я вывожу и x и x1
print(x,x1)

Офлайн

#9 Июль 30, 2015 23:21:03

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Найти в цикле ошибку(логика либо синтаксис)

omon3
для этого я вывожу и x и x1
Для которой итерации?

Офлайн

#10 Июль 30, 2015 23:22:59

omon3
Зарегистрирован: 2015-07-16
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти в цикле ошибку(логика либо синтаксис)

Хотя вы правы, x%2 это 0, я понял свою ошибку
Я не дописал
else:
x1=0

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version