Как да получите криптографски защитена случайност с 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