Сначала я сделал программу 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 не открывается и с предупреждением «не поддерживает этот файл формат". возможно, кто-то знает проблему, пожалуйста, помогите. спасибо