Шифрование изображений с использованием AES-128 - PullRequest
0 голосов
/ 07 мая 2020

Сначала я сделал программу AES-128, она просто шифрует один файл в формате .txt. и я печатаю результат с помощью матрикс 4х4. код выглядит так (только функция)

    def addRoundKey(plain,key):
    for i in range(4):
        for j in range(4):
            plain[i][j]=plain[i][j]^key[i][j]
    return plain
def subByte(plain):
    for i in range(4):
        for j in range(4):
            plain[i][j]=Sbox[plain[i][j]]
    return plain    
def shiftRow(plain):
    plain[0][1],plain[1][1],plain[2][1],plain[3][1]=plain[1][1],plain[2][1],plain[3][1],plain[0][1]
    plain[0][2],plain[1][2],plain[2][2],plain[3][2]=plain[2][2],plain[3][2],plain[0][2],plain[1][2]
    plain[0][3],plain[1][3],plain[2][3],plain[3][3]=plain[3][3],plain[0][3],plain[1][3],plain[2][3]
    return plain
def siapkanMatrixKosong():
    keluaran=[]
    for i in range(4):
        sub=[]
        for j in range(4):
            sub.append(0)
        keluaran.append(sub)
    return keluaran
def mixColumn(plain):
    keluaran=siapkanMatrixKosong()
    keluaran[0][0]=mul2[plain[0][0]]^mul3[plain[0][1]]^plain[0][2]^plain[0][3]
    keluaran[1][0]=mul2[plain[1][0]]^mul3[plain[1][1]]^plain[1][2]^plain[1][3]
    keluaran[2][0]=mul2[plain[2][0]]^mul3[plain[2][1]]^plain[2][2]^plain[2][3]
    keluaran[3][0]=mul2[plain[3][0]]^mul3[plain[3][1]]^plain[3][2]^plain[3][3]
    keluaran[0][1]=plain[0][0]^mul2[plain[0][1]]^mul3[plain[0][2]]^plain[0][3]
    keluaran[1][1]=plain[1][0]^mul2[plain[1][1]]^mul3[plain[1][2]]^plain[1][3]
    keluaran[2][1]=plain[2][0]^mul2[plain[2][1]]^mul3[plain[2][2]]^plain[2][3]
    keluaran[3][1]=plain[3][0]^mul2[plain[3][1]]^mul3[plain[3][2]]^plain[3][3]
    keluaran[0][2]=plain[0][0]^plain[0][1]^mul2[plain[0][2]]^mul3[plain[0][3]]
    keluaran[1][2]=plain[1][0]^plain[1][1]^mul2[plain[1][2]]^mul3[plain[1][3]]
    keluaran[2][2]=plain[2][0]^plain[2][1]^mul2[plain[2][2]]^mul3[plain[2][3]]
    keluaran[3][2]=plain[3][0]^plain[3][1]^mul2[plain[3][2]]^mul3[plain[3][3]]
    keluaran[0][3]=mul3[plain[0][0]]^plain[0][1]^plain[0][2]^mul2[plain[0][3]]
    keluaran[1][3]=mul3[plain[1][0]]^plain[1][1]^plain[1][2]^mul2[plain[1][3]]
    keluaran[2][3]=mul3[plain[2][0]]^plain[2][1]^plain[2][2]^mul2[plain[2][3]]
    keluaran[3][3]=mul3[plain[3][0]]^plain[3][1]^plain[3][2]^mul2[plain[3][3]] 
    return keluaran
def enkripsi(plain,key):
    subkey=keyschedule(key)
    #print('nilai awal :')
    cetak(plain)
    plain=addRoundKey(plain,subkey[0])
    #print('setelah addRoundKey')
    cetak(plain)
    for i in range(9):
        plain=subByte(plain)
       # print('setelah subByte')
        cetak(plain)
        plain=shiftRow(plain)
        #print('setelah shiftRow')
        cetak(plain)
        plain=mixColumn(plain)
        #print('setelah mixColumn')
        cetak(plain)
        plain=addRoundKey(plain,subkey[i+1])
        #print('setelah addRoundKey',i) 
        cetak(plain)
        #print('subkey yang dipakai',i)
        cetak(subkey[i+1]) 
    plain=subByte(plain)
    plain=shiftRow(plain)
    plain=addRoundKey(plain,subkey[10])
    return plain 
#plain=[0x32,0x43,0xf6,0xa8,0x88,0x5a,0x30,0x8d,0x31,0x31,0x98,0xa2,0xe0,0x37,0x07,0x34]
#plain=toTable(plain)


#plain = enkripsi(plain,cipherKey)
#cetak(plain)
def getNextInput(fileDibaca):
    hasil=fileDibaca.read(16)
    panjangFile=len(hasil)
    if(panjangFile<16):
        hasil=hasil.decode()
        for i in range(16-panjangFile):
            hasil=hasil+" "
        hasil=hasil.encode()
    return hasil
def putNextInput(yangDitulis,fileDitulis):
    string=""
    for i in range(4):
        for j in range(4):
            string+=chr(yangDitulis[i][j])
    string=string.encode().strip()
    fileDitulis.write(string)
    pass
def enkripsiAes():
    try:
        baca=open('yo.JPG','rb')
        tulis=open('hasil.JPG','wb')
        i=0
        start_time = time.time()
        while(i<=(os.path.getsize('yo.JPG')/16)):
            asd=getNextInput(baca)
            plain=toTable(asd)
            cipherKey=[0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c]
            cipher=enkripsi(plain,cipherKey)
            putNextInput(cipher,tulis)
            i+=1
        tulis.close()

, и теперь я пытаюсь использовать файл с форматом .JPG, он работает, но результат JPG не открывается и с предупреждением «не поддерживает этот файл формат". возможно, кто-то знает проблему, пожалуйста, помогите. спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...