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
예제 #2
0
	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
예제 #3
0
	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')
예제 #4
0
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
예제 #5
0
 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()
예제 #6
0
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':
예제 #7
0
 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
예제 #9
0
	def generateIV(self):
		self.iv = Random.new().read(AES.block_size)
		return self.iv
예제 #10
0
 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)