def encrypt(self, msg): #message can be of any length... #this manages padding here.. cipher_txt = '' msg_chunks = \ [msg[x:x+Config.ENC_DEC_BLOCK_SIZE] for x in range(0,len(msg),Config.ENC_DEC_BLOCK_SIZE)] for i in range(0, len(msg_chunks) - 1): #doesn't require any padding... #generate a random-iv #??? iv = Random.new().read(AES.block_size) aesVar = AES.new(self.aes_key, AES.MODE_CBC, iv) cipher_txt += (iv + aesVar.encrypt(msg_chunks[i] + chr(self.counter))) self.counter = (self.counter + 1) % 256 last_plain_txt = msg_chunks[-1] + chr(self.counter) #this may not be a multiple of enc_dec_block_size... #so add necessary padding... #**CAREFUL: padding zeros at the end!!** #last_plain_txt = last_plain_txt + \ #chr(0)*(Config.ENC_DEC_BLOCK_SIZE-len(last_plain_txt)) l = Config.ENC_DEC_BLOCK_SIZE last_plain_txt = chr(l - len(last_plain_txt)%l)*\ ( l- len(last_plain_txt)%l) iv = Random.new().read(AES.block_size) aesVar = AES.new(self.aes_key, AES.MODE_CBC, iv) cipher_txt += (iv + aesVar.encrypt(last_plain_txt)) return cipher_txt
def encrypt(self, msg): #message can be of any length... #this manages padding here.. cipher_txt='' msg_chunks = \ [msg[x:x+Config.ENC_DEC_BLOCK_SIZE] for x in range(0,len(msg),Config.ENC_DEC_BLOCK_SIZE)] for i in range(0, len(msg_chunks)-1): #doesn't require any padding... #generate a random-iv #??? iv = Random.new().read(AES.block_size) aesVar = AES.new(self.aes_key, AES.MODE_CBC, iv) cipher_txt += (iv +aesVar.encrypt(msg_chunks[i]+chr(self.counter))) self.counter = (self.counter+1)%256 last_plain_txt = msg_chunks[-1] + chr(self.counter) #this may not be a multiple of enc_dec_block_size... #so add necessary padding... #**CAREFUL: padding zeros at the end!!** #last_plain_txt = last_plain_txt + \ #chr(0)*(Config.ENC_DEC_BLOCK_SIZE-len(last_plain_txt)) l = Config.ENC_DEC_BLOCK_SIZE last_plain_txt = chr(l - len(last_plain_txt)%l)*\ ( l- len(last_plain_txt)%l) iv=Random.new().read(AES.block_size) aesVar = AES.new(self.aes_key, AES.MODE_CBC, iv) cipher_txt += (iv +aesVar.encrypt(last_plain_txt)) return cipher_txt
def __init__(self, type="client"): if type == "client": rng = Random().read key = RSA.generate(2048, rng) self.__publicKey = key.publickey().exportKey('PEM') self.__privateKey = key.exportKey('PEM')
def generate_keys(): # generate keys modlen = 2560 pvKey = RSA.generate(modlen, Random().read) pbKey = pvKey.publickey() # export keys as unicode strings pbKey = pbKey.exportKey("PEM") pvKey = pvKey.exportKey("PEM") pbKey = pbKey.decode('utf-8') pvKey = pvKey.decode('utf-8') return pvKey, pbKey
def encrypt(self, data): plain_text = self.pad(data) iv = Random().read(AES.block_size) cipher = AES.new(self.key, AES.MODE_OFB, iv) return b64encode(iv + cipher.encrypt(plain_text.encode())).decode()
from flask import Flask, render_template, request from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 from Crypto.Random import new as Random from base64 import b64encode, b64decode app = Flask(__name__) #Set up the RSA keys randon_generator = Random().read set_of_keys = RSA.generate(1024, randon_generator) public_key = set_of_keys.publickey() # Defining Routes @app.route('/') def index(): return render_template('index.html') @app.route('/submit', methods=['POST']) def submit(): if request.method == 'POST': message = request.form['message'] isEncry = request.form['isEncry'] # Validating input if message == '': return render_template('index.html', message='Please enter required fields') elif len(message) > 200 and isEncry == 'true': return render_template('index.html', message='Please insert an string with less than 200 characters') # Encrypting Message if isEncry == 'true':
def generate_key(self, key_length): assert key_length in [1024, 2048, 4096] rng = Random().read self.key = RSA.generate(key_length, rng)
def generateIV(self): self.iv = Random.new().read(AES.block_size) return self.iv
def generate_key(self, key_length): rng = Random().read self.key = RSA.generate(key_length, rng)
def encrypt(self): plain_text = self.readfile() iv = Random().read(AES.block_size) cipher = AES.new(self.key, AES.MODE_OFB, iv) a = base64.b64encode(iv + cipher.encrypt(bytes(plain_text, 'utf8'))).decode() self.writefile(a)