I have created a django-project called dp1 and inside that I have made a djano-app called da1. I am working on Windows inside a virtual env named testing.
da1\views.py
from django.shortcuts import render
# Create your views here.
from django.http.response import HttpResponse
from django.shortcuts import render
import hashlib
from Crypto import Random
from Crypto.Cipher import AES
from base64 import b64encode, b64decode
import os
class AESCipher(object):
def __init__(self, key):
self.block_size = AES.block_size
self.key = hashlib.sha256(key.encode()).digest()
def encrypt(self, plain_text):
plain_text = self.__pad(plain_text)
iv = Random.new().read(self.block_size)
cipher = AES.new(self.key, AES.MODE_CBC, iv)
encrypted_text = cipher.encrypt(plain_text.encode())
return b64encode(iv + encrypted_text).decode("utf-8")
def decrypt(self, encrypted_text):
encrypted_text = b64decode(encrypted_text)
iv = encrypted_text[:self.block_size]
cipher = AES.new(self.key, AES.MODE_CBC, iv)
plain_text = cipher.decrypt(encrypted_text[self.block_size:]).decode("utf-8")
return self.__unpad(plain_text)
def __pad(self, plain_text):
number_of_bytes_to_pad = self.block_size - len(plain_text) % self.block_size
ascii_string = chr(number_of_bytes_to_pad)
padding_str = number_of_bytes_to_pad * ascii_string
padded_plain_text = plain_text + padding_str
return padded_plain_text
@staticmethod
def __unpad(plain_text):
last_character = plain_text[len(plain_text) - 1:]
return plain_text[:-ord(last_character)]
# Create your views here.
def home(req):
return render(req,'home.html',{"name":"Manish"})
def add(req):
choice = req.POST['choice'] # value of selected radio button
val1 = req.POST['text1']
val2 = req.POST['text2']
result = choice+val1+val2
key_128 = "kuch bhi"
iv = "InitializationVe"
aesCipher = AESCipher(key_128)
print(aesCipher.key)
sentence = "manish swami"
print(aesCipher.encrypt(sentence))
return render(req, 'result.html' ,{'result': result})
from Crypto.Cipher import AES
I am getting a error Import "Crypto.Cipher" could not be resolved Pylance (reportMissingImports)
.
I have installed the pycryptodome module inside the virtual env but still the error is coming.
The link to the package pycrytodome is → https://www.pycryptodome.org/en/latest/src/installation.html
I tried doing the test-everything command python -m Crypto.SelfTest
but it was only working in global.
I installed this package in Global Env and also in Virtual env but In virtual it is not working whereas in global it is working fine.
This is the global app:
import hashlib
from Crypto import Random
from Crypto.Cipher import AES
from base64 import b64encode, b64decode
import os
class AESCipher(object):
def __init__(self, key):
self.block_size = AES.block_size
self.key = hashlib.sha256(key.encode()).digest()
def encrypt(self, plain_text):
plain_text = self.__pad(plain_text)
iv = Random.new().read(self.block_size)
cipher = AES.new(self.key, AES.MODE_CBC, iv)
encrypted_text = cipher.encrypt(plain_text.encode())
return b64encode(iv + encrypted_text).decode("utf-8")
def decrypt(self, encrypted_text):
encrypted_text = b64decode(encrypted_text)
iv = encrypted_text[:self.block_size]
cipher = AES.new(self.key, AES.MODE_CBC, iv)
plain_text = cipher.decrypt(encrypted_text[self.block_size:]).decode("utf-8")
return self.__unpad(plain_text)
def __pad(self, plain_text):
number_of_bytes_to_pad = self.block_size - len(plain_text) % self.block_size
ascii_string = chr(number_of_bytes_to_pad)
padding_str = number_of_bytes_to_pad * ascii_string
padded_plain_text = plain_text + padding_str
return padded_plain_text
@staticmethod
def __unpad(plain_text):
last_character = plain_text[len(plain_text) - 1:]
return plain_text[:-ord(last_character)]
if __name__ == "__main__" :
print("hello")
key_128 = "samplekey"
iv = "InitializationVe"
aesCipher = AESCipher(key_128)
print(aesCipher.key)
sentence = "inputsentence"
print(aesCipher.encrypt(sentence))
print(aesCipher.decrypt(aesCipher.encrypt(sentence)))
Renaming the folder 'crypto' in virtual env's site-packages folder to 'Crypto' resolved the issue.