Шифрование AES не работает должным образом в UWP - PullRequest
0 голосов
/ 02 января 2019

У нас есть приложение на C ++, где оно шифрует пароль с помощью алгоритма AES через API openssl ( EVP_EncryptInit_ex, EVP_EncryptUpdate, EVP_EncryptFinal_ex ).

Теперь я пытаюсь разработать приложение UWP, через которое хочувыполните ту же аутентификацию, что и вышеупомянутое устаревшее приложение.

Но когда я использую API из "Windows.Security.Cryptography" , моя аутентификация не проходит, поскольку вывод зашифрованных данных отличается от прежнегоприложение, поэтому дешифрование завершается неудачно, и происходит аутентификация.

Устаревшее приложение использует один ключ и вектор инициализации, и то же самое используется в моем приложении UWP.Устаревшее приложение использует режим шифрования CBC, я использовал "AesCbcPKCS7" в своем UWP, но зашифрованный вывод отличается.

Я также попробовал просто "AesCbc" и дополнялданные согласно заполнению PKCS7 вручную, но зашифрованный вывод отличается, и моя аутентификация не удалась.

Пожалуйста, помогите с вышеупомянутой проблемой.

Некоторые из примеров потока API устаревшего кода приложения:

EVP_CIPHER_CTX_init(&ctx);
EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key, iv);
EVP_EncryptUpdate(&ctx, output, &nOutputSize, input, strlen((const char *)input)+1);
EVP_EncryptFinal_ex(&ctx, output + nOutputSize, &nTmplen);
EVP_CIPHER_CTX_cleanup(&ctx);

Пример кода UWP ниже:

IBuffer iBuf = CryptographicBuffer.ConvertStringToBinary(strPwd, BinaryStringEncoding.Utf8);            
IBuffer iPubKey = CryptographicBuffer.CreateFromByteArray(PUB_KEY);

SymmetricKeyAlgorithmProvider objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7);
CryptographicKey cryptKey = objAlg.CreateSymmetricKey(iPubKey);
IBuffer iv = CryptographicBuffer.CreateFromByteArray(INIT_VECTOR);

IBuffer encryptPwd = CryptographicEngine.Encrypt(cryptKey, iBuf, iv);
string strEncPwd = CryptographicBuffer.EncodeToBase64String(encryptPwd);
...