diff --git a/.gitignore b/.gitignore
new file mode 100755
index 0000000..6566af4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,255 @@
+### VisualStudioCode template
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+!.vscode/*.code-snippets
+
+# Local History for Visual Studio Code
+.history/
+
+# Built Visual Studio Code Extensions
+*.vsix
+
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# AWS User-specific
+.idea/**/aws.xml
+
+# Generated files
+.idea/**/contentModel.xml
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn. Uncomment if using
+# auto-import.
+# .idea/artifacts
+# .idea/compiler.xml
+# .idea/jarRepositories.xml
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+# *.iml
+# *.ipr
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# SonarLint plugin
+.idea/sonarlint/
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
+# Android studio 3.1+ serialized cache file
+.idea/caches/build_file_checksums.ser
+
+### Python template
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# poetry
+# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+# This is especially recommended for binary packages to ensure reproducibility, and is more
+# commonly ignored for libraries.
+# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# pdm
+# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+# in version control.
+# https://pdm.fming.dev/#use-with-ide
+.pdm.toml
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+# and can be added to the global gitignore or merged into this file. For a more nuclear
+# option (not recommended) you can uncomment the following to ignore the entire idea folder.
+#.idea/
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100755
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/SEDUX.iml b/.idea/SEDUX.iml
new file mode 100755
index 0000000..8b8c395
--- /dev/null
+++ b/.idea/SEDUX.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100755
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100755
index 0000000..db8786c
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100755
index 0000000..f6434d7
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100755
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
diff --git a/main.py b/main.py
old mode 100644
new mode 100755
index ee074d9..c7c2321
--- a/main.py
+++ b/main.py
@@ -1,73 +1,60 @@
import sys
-def str2bin(string):
- binary = []
-
- for char in string:
- binary.append(format(ord(char), '08b'))
- return ' '.join(binary)
+def string_to_binary(string):
+ """Converts a string to binary representation."""
+ return ' '.join(format(ord(char), '08b') for char in string)
-def bin2int(binary):
- return int(binary, 2)
-def XOR(msgByte, keyByte):
-
- if len(msgByte) != 8 or len(keyByte) != 8 or not all(bit in '01' for bit in msgByte) or not all(bit in '01' for bit in keyByte):
- print("System ERROR [ERR CODE : 9]")
- return 9
+def binary_to_int(binary):
+ """Converts binary representation to integer."""
+ return int(binary, 2)
- value1 = int(msgByte, 2)
- value2 = int(keyByte, 2)
- result = value1 ^ value2
- binary = format(result, '08b')
- return binary
+def xor_bytes(byte1, byte2):
+ """Performs XOR operation on two bytes."""
+ return format(binary_to_int(byte1) ^ binary_to_int(byte2), '08b')
-def Encript(message, key):
+def encrypt(message, key):
+ """Encrypts the message using the provided key."""
+ key_binary = string_to_binary(key).split()
+ key_len = len(key_binary)
+ encrypted_message = []
- print("Encrypted Message: ")
- j = 0
+ for i, char in enumerate(message):
+ encrypted_byte = xor_bytes(string_to_binary(char), key_binary[i % key_len])
+ encrypted_message.append(binary_to_int(encrypted_byte))
- for i in range(0, len(message)):
- if j == len(key):
- j = 0
-
- print(bin2int(XOR(str2bin(message).split()[i], str2bin(key).split()[j])), end = "%")
- j += 1
+ return "%".join(map(str, encrypted_message))
- print("\n")
-def Decrypt(message, key):
-
- message = message.split("%")
- if '' in message:
- message.remove('')
- message = list(map(lambda x : format(int(x), '08b'), message))
+def decrypt(message, key):
+ """Decrypts the message using the provided key."""
+ key_binary = string_to_binary(key).split()
+ key_len = len(key_binary)
+ decrypted_message = []
- print("Decrypted Message: ")
+ for i, byte in enumerate(message.split("%")):
+ decrypted_byte = xor_bytes(byte, key_binary[i % key_len])
+ decrypted_message.append(chr(binary_to_int(decrypted_byte)))
- j = 0
- for i in range(0, len(message)):
- if j == len(key):
- j = 0
+ return "".join(decrypted_message)
- print(chr(bin2int(XOR(message[i], str2bin(key).split()[j]))), end = "")
- j += 1
-
-message = input("Enter Message: ")
-key = input("Enter Key: ")
+if __name__ == "__main__":
+ message = input("Enter Message: ")
+ key = input("Enter Key: ")
-print("Encrypt(e) or Decrypt(d) message?")
-getchar = lambda: sys.stdin.read(1)
+ print("Encrypt(e) or Decrypt(d) message?")
+ action = input()
-match getchar():
- case 'e':
- Encript(message, key)
- case 'd':
- Decrypt(message, key)
- case _:
+ if action == 'e':
+ print("Encrypted Message:")
+ print(encrypt(message, key))
+ elif action == 'd':
+ print("Decrypted Message:")
+ print(decrypt(message, key))
+ else:
print("Invalid input. Exiting...")
- exit()
\ No newline at end of file
+ sys.exit()
\ No newline at end of file