def eccDecrypt(data_cipher, privateKey): "Giải mã ECC với đầu vào là chuỗi bytes từ hình ảnh đã mã hoá" c = data_cipher[:64] C1 = (OS2IP(c[:32]), OS2IP(c[-32:])) C = EccMath.scalar_Point(privateKey, C1) C = EccMath.negatives_Point(C) data_cipher = data_cipher[64:] points = [] for i in range(0, len(data_cipher), 64): data = data_cipher[i:i + 64] x = OS2IP(data[:32]) y = OS2IP(data[-32:]) points.append((x, y)) plain_data = [] for point in points: plain_data.append(elgamalDe(C, point)) plain_bytes = [] for j in plain_data: plain_bytes.append(I2OSP(j, 31)) plain_data = b''.join(plain_bytes) plain_data = remove_padding(plain_data) return plain_data
def eccDecrypt(data_cipher, privateKey): c = data_cipher[:64] C1 = (OS2IP(c[:32]), OS2IP(c[-32:])) C = EccMath.scalar_Point(privateKey, C1) C = EccMath.negatives_Point(C) data_cipher = data_cipher[64:] points = [] for i in range(0, len(data_cipher), 64): data = data_cipher[i:i+64] x = OS2IP(data[:32]) y = OS2IP(data[-32:]) points.append((x, y)) plain_data = [] for point in points: plain_data.append(elgamalDecrypt(C, point)) plain_bytes = [] for j in plain_data: plain_bytes.append(I2OSP(j, 31)) plain_data = b''.join(plain_bytes) return plain_data
def RSAencrypt(publickey, data): cipher_rsa = [] for i in range(0, len(data), 127): value = data[i:i + 127] m = OS2IP(value) c = cipher(publickey, m) cipher_rsa.append(I2OSP(c, 128)) return b''.join(cipher_rsa)
def RSAdecrypt(privatekey, data): plain_rsa = [] for i in range(0, len(data), 128): value = data[i:i + 128] c = OS2IP(value) m = cipher(privatekey, c) plain_rsa.append(I2OSP(m, 127)) return b''.join(plain_rsa)
def eccEncrypt(data, publicKey): k = random.randint(1, n) C1 = EccMath.scalar_Point(k, G) P = EccMath.scalar_Point(k, publicKey) cipher_points = [] for i in range(0, len(data), 31): plain = data[i:i+31] plain = OS2IP(plain) ecc_enc = elgamalEncrypt(plain, P) cipher_points.append(ecc_enc) cipher_bytes = [] for point in cipher_points: point_to_bytes = I2OSP(point[0], 32) + I2OSP(point[1], 32) cipher_bytes.append(point_to_bytes) cipher_bytes = b''.join(cipher_bytes) c = I2OSP(C1[0], 32) + I2OSP(C1[1], 32) return c + cipher_bytes
def eccEncrypt(rsa_value, publicKey): "Mã hoá ECC với đầu vào là chuỗi bytes đã được mã hoá bằng RSA" k = random.randint(1, n) C1 = EccMath.scalar_Point(k, G) P = EccMath.scalar_Point(k, publicKey) cipher_points = [] for i in range(0, len(rsa_value), 31): plain = rsa_value[i:i + 31] plain = OS2IP(plain) ecc_enc = elgamalEn(plain, P) cipher_points.append(ecc_enc) cipher_bytes = [] for point in cipher_points: point_to_bytes = I2OSP(point[0], 32) + I2OSP(point[1], 32) cipher_bytes.append(point_to_bytes) cipher_bytes = b''.join(cipher_bytes) c = I2OSP(C1[0], 32) + I2OSP(C1[1], 32) return c + cipher_bytes
def rsaDecrypt(privatekey, data): "Giải mã bằng thuật toán RSA với đầu vào là chuỗi bytes được giải mã từ ECC" plain_rsa = [] # Đọc 128 bytes một để giải mã for i in range(0, len(data), 128): value = data[i:i + 128] c = OS2IP(value) m = rsa_cipher(privatekey, c) plain_rsa.append(I2OSP(m, 127)) # Trả về chuỗi bytes sau khi giải mã return b''.join(plain_rsa)
def rsaEncrypt(publickey, data): "Mã hoá bằng thuật toán RSA với đầu vào là chuỗi bytes đọc từ file ảnh" cipher_rsa = [] # Đọc 127 bytes một để mã hoá for i in range(0, len(data), 127): value = data[i:i + 127] m = OS2IP(value) c = rsa_cipher(publickey, m) cipher_rsa.append(I2OSP(c, 128)) # Trả về chuỗi bytes sau khi mã hoá return b''.join(cipher_rsa)