【发布时间】:2021-08-15 15:25:15
【问题描述】:
我创建了一个名为 dp1 的 django 项目,并在其中创建了一个名为 da1 的 djano 应用程序。 我正在一个名为 testing 的虚拟环境中使用 Windows。
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 我收到一个错误Import "Crypto.Cipher" could not be resolved Pylance (reportMissingImports)。
我已经在虚拟环境中安装了 pycryptodome 模块,但仍然出现错误。
pycrytodome包的链接是→https://www.pycryptodome.org/en/latest/src/installation.html
我尝试执行 test-everything 命令python -m Crypto.SelfTest,但它只在全球范围内工作。
我在 Global Env 和 Virtual env 中都安装了这个包,但是在虚拟环境中它不能工作,而在全局环境中它工作正常。
这是全球应用:
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)))
【问题讨论】:
-
你试过
pycrypto包安装吗? -
@SuyogShimpi ya .. 但由于某种原因它无法正常工作
-
好像是安装问题,你试过重新安装吗?而'python -m Crypto.SelfTest'命令可以帮你测试它的安装完整性,你试过了吗?
标签: python django visual-studio-code virtualenv pycryptodome