У нас есть приложение на 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);