«Ошибка типа: в скалярный индекс Hill-RSA могут быть преобразованы только целочисленные скалярные массивы» - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь закодировать криптографическую программу Hill-RSA , часть которой вы можете увидеть здесь:

q2=31
alphabet=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",","," ",".",";","_"]
X=np.zeros((m,1),dtype=np.int32)
Y=np.zeros((m,1),dtype=np.int32)
Texte_decode="";
for i in range(1,(len(Texte_code)/m)+1):
    for k in range(0,m):
        j=0
        while (Texte_code[k+m*(i-1)]<>alphabet[j+1]):
            j=j+1
        X[k]=j
    X=X.transpose()
    A2=np.zeros((m,m),dtype=np.int32)
    for u in range(0,m):
        for l in range(0,m):
            A2[u,l]=A[u,l]
    Y=X.dot(A2)
    Y=Y.transpose()
    pprint(Y)
    Y2=np.zeros((m,1),dtype=np.int32)
    for ind in range(0,m):
        Y2[ind]=Y[ind]%q2
    pprint(Y2)
    for k in range(0,m):
        Texte_decode=Texte_decode+alphabet[Y2[k]+1]
for i in range(len(Texte_decode),len(Texte_decode)-m+1,-1):
    if Texte_decode[i]=="." and Texte_decode[i-1]==".":
        Texte_decode=Texte_decode[1,i-1]
print Texte_decode

Когда я выполняю эту часть, я получаю

"Ошибка типа: в скалярный индекс могут быть преобразованы только целочисленные скалярные массивы"

в строке

Texte_decode=Texte_decode+alphabet[Y2[k]+1]

Может кто-нибудь помочь мне избавиться от этогоошибка?

Заранее спасибо

1 Ответ

0 голосов
/ 20 ноября 2018

Какую отладку вы сделали?Вы рассматривали природу элементов проблемной линии?

Texte_decode=Texte_decode+alphabet[Y2[k]+1]

k происходит от for k in range(0,m):, так что это не должно быть проблемой.Это явно целое число.

Ваш отпечаток Y2.Он инициализируется как массив (m,1).Итак, Y2[k] будет массивом (1,), верно?

alphabet - это список.

В интерактивной оболочке давайте попробуем контрольный пример:

In [70]: [1,2,3,4][np.array([1])]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-70-4ad73b219fa3> in <module>()
----> 1 [1,2,3,4][np.array([1])]

TypeError: only integer scalar arrays can be converted to a scalar index

То же сообщение об ошибке!

Если мы начнем с 1d-массива и выберем элемент, индексирование будет работать:

In [71]: [1,2,3,4][np.arange(4)[1]]
Out[71]: 2

Теперь, когда мы понимаем проблему, решение должно бытьочевидно, верно?

...