Програмата за шифроване не работи - TypeError: индексите на низовете трябва да са цели числа, а не str

Работя върху програма за криптиране, която просто криптира низ в десетични стойности и ще напиша друга програма, която ще го декриптира. Към момента той не прави нищо с десетичните стойности, но когато се опитам да направя XOR двоичните файлове, които използвам за криптиране, той връща грешката

    Traceback (most recent call last):
  File "./enc.py", line 53, in <module>
    encrypt()
  File "./enc.py", line 35, in encrypt
    val1 = text2[i] + decryptionKey[j]
  TypeError: string indices must be integers, not str

Ето кода

    #!/usr/bin/env python2
    import sys
    def encrypt():
      text1 = raw_input("Please input your information to encrypt: ")
      text2 = []
      #Convert text1 into binary (text2)
      for char in text1:
        text2.append(bin(ord(char))[2:])
      text2 = ''.join(text2)

      key = raw_input("Please input your key for decryption: ")
      decryptionKey = []
      #Convert key into binary (decryptionKey)
      for char in key:
        decryptionKey.append(bin(ord(char))[2:])
      decryptionKey = ''.join(decryptionKey)

      #Verification String
      print "The text is '%s'" %text1
      print "The key is '%s'" %key
      userInput1 = raw_input("Is this information ok? y/n ")
      if userInput1 == 'y':
        print "I am encrypting your data, please hold on."
      elif userInput1 == 'n':
        print "Cancelled your operation."
      else:
        print "I didn't understand that. Please type y or n (I do not accept yes or no as an answer, and make sure you type it in as lowercase. We should be able to fix this bug soon.)"

      finalString = []

      if userInput1 == 'y':
        for i in text2:
          j = 0
          k = 0
          val1 = text2[i] + decryptionKey[j]
          if val1 == 0:
            finalString[k] = 0
          elif val1 == 1:
            finalString[k] = 1
          elif val1 == 2:
            finalString[k] = 0
          j += 1
          k += 1
        print finalString






encrypt()

Ако е по-лесно, можете също да видите източника @ https://github.com/ryan516/XOREncrypt/blob/master/enc.py


person Ryan Smith    schedule 02.11.2013    source източник


Отговори (1)


for i in text2:

Това няма да даде индекси на списъка, а действителните символи на низа като низ. Може да искате да използвате изброяване

for i, char in enumerate(text2):

Например,

text2 = "Welcome"
for i in text2:
    print i,

ще отпечата

W e l c o m e

но

text2 = "Welcome"
for i, char in enumerate(text2):
    print i, char

ще даде

0 W
1 e
2 l
3 c
4 o
5 m
6 e
person thefourtheye    schedule 02.11.2013
comment
Чакай, това обработва ли масива като масив Char? Надявах се, че е десетичен масив... Съжалявам, че съм Python Noob, но това ли го вижда интерпретаторът? - person Ryan Smith; 02.11.2013
comment
@RyanSmith Ако използвате нормален for цикъл с низове, той ще бъде повторен като масиви от знаци. Тъй като в python няма тип данни char, всеки char се третира като низ в python. - person thefourtheye; 03.11.2013
comment
Но дали това е масив от символи/низове? Объркан съм :(. Надявах се, че е двоичен или десетичен масив за манипулиране на числа. Нещо обърка ли се? - person Ryan Smith; 03.11.2013
comment
text2 = ''.join(text2) този ред преобразува всичко в низ. - person thefourtheye; 03.11.2013