Как получить криптографически безопасную случайность с помощью c++/cx на Windows Phone?

Таким образом, очевидно, что класс System.Security.Cryptography.RNGCryptoServiceProvider доступен в .NET. Но насколько я понимаю (я новичок в разработке Windows Phone 8), я не могу получить доступ к этой функции из c++/cx... или могу?

Мне не удалось найти какую-либо другую функцию/класс в API Windows Phone, которую я мог бы использовать. Что мне не хватает?


person A. Nilsson    schedule 24.05.2014    source источник
comment
Я знаю, что API Windows Phone отличается от полнофункционального Windows, но разве Crypto API не доступен (в некоторой степени) и на этой платформе? То есть, если ваш код на стороне C++ не является управляемым (в этом случае вы, вероятно, уже знаете (или должны), как использовать System.Security.Cryptography в уже управляемом коде, базовый криптографический API ala CryptGenRandom кажется естественным для C++, если он доступен. Я избегаю WinPhone как чума, поэтому, если это недоступно на этой платформе, заранее извиняюсь.   -  person WhozCraig    schedule 24.05.2014
comment
К сожалению, CryptGenRandom не доступен на WP8.   -  person A. Nilsson    schedule 25.05.2014


Ответы (1)


Я обнаружил, что на самом деле могу использовать WinRT Windows.Security.Cryptography API из c++/cx.

Решение было просто

auto iBuffer = Windows::Security::Cryptography::CryptographicBuffer::GenerateRandom(rand_len);

Чтобы получить данные из iBuffer, я использовал этот ответ:

auto reader = Windows::Storage::Streams::DataReader::FromBuffer(iBuffer);
std::vector<unsigned char> data(reader->UnconsumedBufferLength);
if (!data.empty())
    reader->ReadBytes(
        ::Platform::ArrayReference<unsigned char>(
            &data[0], data.size()
        )
    );
person A. Nilsson    schedule 25.05.2014