Мне дали существующий алгоритм шифрования, который необходим для шифрования пароля перед его отправкой через API.
У меня нет опыта работы с другими языками, кроме Python, и поэтому я не могу понять, чтофункционально мне нужно сделать, чтобы повторить это.
Я считаю, что режимом по умолчанию для AES в C # является CBC.Я думаю, что скопировал большую часть необходимой работы, но мне нужно дополнить данные, и я не знаю точно, на каком этапе это происходит, или где добавляется длина.Я не понимаю порядок вещей, которые будут происходить в коде C.Я также полагаю, что по умолчанию используется метод заполнения PKCS # 7, хотя я рад, что исправлю это.
Original code
public static string EncryptStringToBytes_Aes(string username, string password)
{
string encrypted = string.Empty;
byte[] clearBytes = Encoding. UTF8.GetBytes(password);
using (Aes aesAlg = Aes.Create())
{
byte[] k;
byte[] iv;
byte[] bytes = Encoding.UTF8.GetBytes(username);
k = SHA256.Create().ComputeHash(bytes);
iv = MD5.Create().ComputeHash(bytes);
aesAlg.Key = k;
aesAlg.IV = iv;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key,
aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt,
encryptor, CryptoStreamMode.Write))
{
csEncrypt.Write(clearBytes, 0, clearBytes.Length);
}
encrypted = Convert.ToBase64String(msEncrypt.ToArray());
}
}
return encrypted;
}
python recreation
from Crypto.Cipher import AES
import hashlib
username = "example"
password = "example2"
mode = AES.MODE_CBC
clearbytes = password.encode('utf-8')
bytes = username.encode('utf-8')
key = hashlib.sha256(bytes).digest()
iv = hashlib.md5(bytes).digest()
encryptor = AES.new(key, mode, IV = iv)
length = password + '0' + str(len(clearbytes))
encrypted= encryptor.encrypt(length).encode('base64')
Я получаю «ValueError: Входные строки должны бытькратное длине 16 ".
И когда я попробовал некоторые отступы, кодирование сообщает:" AttributeError: у объекта 'bytes' нет атрибута "encode" "
Я надеюсь, чтокто-то, кто может прочитать этот код, может помочь мне с последними шагами по воссозданию функциональности в Python.