Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ dist/
build/
*.egg-info/

.env
.env
.vscode
29 changes: 29 additions & 0 deletions encryptor/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,35 @@ def aes_decrypt(text):
"content": Aes.decrypt(text, key, nonce)
})

@app.route("/api/transposition/encrypt")
def transposition_encrypt():
key = request.args.get("key")
if key:
key = int(key)
else:
key = 0
message = request.args.get("text")
return jsonify({
"status": 200,
"content": Transposition.encrypt(key, message)
})


@app.route("/api/transposition/decrypt")
def transposition_decrypt():
key = int(request.args.get("key",0))
key = request.args.get("key")
if key:
key = int(key)
else:
key = 0
message = request.args.get("text")
message = request.args.get("text")
return jsonify({
"status": 200,
"content": Transposition.decrypt(key, message)
})


@app.route("/api/error")
def trigger_error():
Expand Down
1 change: 1 addition & 0 deletions encryptor/encryptors/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
from .vigenere import *
from .rsa import *
from .aes import *
from .transposition import *
41 changes: 41 additions & 0 deletions encryptor/encryptors/transposition.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import math
from flask import jsonify

class Transposition:

@staticmethod
def encrypt(key, message):
ciphertext = []
for col in range(key):
position = col
while position < len(message):
ciphertext.append(message[position])
position += key
return ''.join(ciphertext)

@staticmethod
def decrypt(key, message):
numOfRows = math.ceil(len(message) / key)
plaintext = []
cipher = [*message]
remainder = len(message)%key
count=0
if(remainder != 0):
for i in range(0,len(message),numOfRows):
count += 1
if(count > remainder):
cipher.insert(i+numOfRows-1,'#')
cipher.append('#')
for row in range(numOfRows):
position = row
while(position < len(cipher)):
plaintext.append(cipher[position])
position += numOfRows
plaintext = [ele for ele in plaintext if ele != '#']
else:
for row in range(numOfRows):
position = row
while(position < len(message)):
plaintext.append(message[position])
position += numOfRows
return ''.join(plaintext)
11 changes: 11 additions & 0 deletions tests/api/api_transposition_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import pytest

def test_transposition_encrypt_api(client):
response = client.get("/api/transposition/encrypt?key=3&text=test text").get_json()
assert response["status"] == 200
assert response["content"] == "ttee xstt"

def test_transposition_decrypt_api(client):
response = client.get("/api/transposition/decrypt?key=3&text=ttee xstt").get_json()
assert response["status"] == 200
assert response["content"] == "test text"
8 changes: 8 additions & 0 deletions tests/encryptors/transposition_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import pytest
from encryptor.encryptors import Transposition

def test_encrypt():
assert Transposition.encrypt(3, "TEST MESSAGE") == "TTEAE SGSMSE"

def test_decrypt():
assert Transposition.decrypt(3, "TTEAE SGSMSE") == "TEST MESSAGE"