def encrypt(self, pt): self.buffer = bytearray() #return할 buffer self.enciv = bytearray() #암호화 시킨 iv를 한꺼번에 저장할 buffer self.pt = to_bytearray(pt) self.ptlength = len(pt) #리턴시킬 암호문 길이 ''' block count 설정 16배수면 그대로 16배수가 아니면 padding을 통해 16배수로 만들어주고 count 설정 ''' cnt = int(len(pad(self.pt)) / self.block_size) if ((len(self.pt) % self.block_size) != 0): cnt = len(pad(self.pt)) / self.block_size ''' iv 미리 계산 ''' tmp = self.iv #입력 iv for i in range(cnt - 1): tmp = self.crypto.encrypt(tmp) self.enciv += tmp #iv계산 저장 ''' 암호화 진행 ''' for i in range(cnt): buf1 = self.enciv[(self.block_size * i):(self.block_size * i) + self.block_size] #block size에 맞게 미리 계산한 iv 자르기 buf2 = self.pt[(self.block_size * i):(self.block_size * i) + self.block_size] #block size로 평문 자르기 self.buffer += xorAr(buf1, buf2) #xor 진행 return self.buffer[:self.ptlength] #평문 길이만큼 return
def encrypt(self, pt): self.buffer = bytearray() #리턴할 buffer self.pt = pad(pt) #padding self.pt = to_bytearray(self.pt) #to bytearray cnt = int(len(self.pt) / self.block_size) #count ''' 암호화 진행 ''' for i in range(cnt): buf = self.pt[(self.block_size * i):(self.block_size * i) + self.block_size] #block 자르기 enc = self.crypto.encrypt(buf) self.buffer += enc return self.buffer
def encrypt(self, pt): self.buffer = bytearray() #return buffer self.pt = to_bytearray(pt) self.ptlength = len(pt) #return length ''' 16의 배수에 맞게 cnt 설정 ''' cnt = int(len(self.pt) / self.bloc_size) if ((len(self.pt) / self.bloc_size) != 0): cnt = len(pad(self.pt)) for i in range(cnt): self.buffer += xorAr(self.crypto.encrypt( self.ctr), self.pt[(self.bloc_size * i):(self.bloc_size * i) + self.bloc_size]) #암호화 진행 self.cal_ctr() #ctr update return self.buffer[:self.ptlength]
def encrypt(self, pt): self.buffer = bytearray() #return buffer self.pt = to_bytearray(pt) #plain text convert to bytearray self.ptlength = len(pt) #return할 cipher ptext 길이 ''' 평문의 길이가 16의 배수이면 그대로 cnt설정 16의 배수가 아니면 padding을 해서 16의 배수로 만든 다음 cnt 설정 ''' cnt = int(len(self.pt)/self.block_size) if((len(self.pt)/self.block_size) != 0): cnt = len(pad(self.pt)) c0 = self.iv #cipher block for i in range(cnt-1): buf = self.pt[(self.block_size * i) : (self.block_size*i) + self.block_size] #block size로 plain text 자르기 c0 = self.crypto.encrypt(c0) #암호화 c0 = xorAr(buf, c0) #xor 진행 and cipher block update self.buffer += c0 #adding block return self.buffer[:self.ptlength]
def __init__(self, key, iv, block_size=16): self.crypto = LEA(key) self.iv = to_bytearray(iv) self.block_size = block_size
def __init__(self, key, ctr, block_size=16): self.crypto = LEA(key) self.ctr = to_bytearray(ctr) self.bloc_size = block_size
def __init__(self, key,iv, block_size = 16): self.crypto = LEA(key) #암호 알고리즘 선언 self.iv = to_bytearray(iv) #iv convert to byte array self.block_size = block_size #block size setting