Как импортировать сеансовый ключ (обмен открытым ключом RSA) в UWP - PullRequest
0 голосов
/ 13 июня 2019

Мне нужно реализовать функцию расшифровки, подобную этой, в win32, но я знаю, как импортировать ключ сеанса в UWP.

CryptAcquireContext(&hProv, L"DecryptContainer", MS_ENH_RSA_AES_PROV, PROV_RSA_AES, CRYPT_NEWKEYSET) ; 

// private key blob in pbPrvBlob
BYTE *pbPrvBlob;
DWORD cbPrvBlob; 

// Convert the private key file bytes into an HCRYPTKEY.

HCRYPTKEY hKey;
hr = CryptImportKey(hProv, pbPrvBlob, cbPrvBlob, 0, 0, &hKey);

// Convert the encrypted session key file bytes into an HCRYPTKEY.
BYTE *pbSymBlob; // contain encrypted session key blob
DWORD cbSymBlob;
HCRYPTKEY hSymKey;
CryptImportKey(hProv, pbSymBlob, cbSymBlob, hKey, 0, &hSymKey);

Я пробую этот код в UWP, API не поддерживают общедоступный RSABlob-файл алгоритма обмена ключами.Поэтому я получаю зашифрованные данные и пытаюсь расшифровать их с помощью личного ключа RSA.Ошибка в функции расшифровки.Как импортировать файл BLOB алгоритма обмена открытыми ключами RSA?

void test_load_keys()
{
    byte[] PrvBlob = await ReadFileToByteArray("prvkey.blob");
    byte[] Cipher = await ReadFileToByteArray("userdata.blob");
    byte[] SymBlob = await ReadFileToByteArray("sessionkey.blob");

    IBuffer PrvBlobBuffer = PrvBlob.AsBuffer();
    AsymmetricKeyAlgorithmProvider asymmAlg = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1);

    CryptographicKey Prvkey = asymmAlg.ImportKeyPair(PrvBlobBuffer, CryptographicPrivateKeyBlobType.Capi1PrivateKey);

    IBuffer sessionblob = SymBlob.AsBuffer();
    int offset_start = 12;
    int encryed_length = 128;
    int count = (SymBlob.Length - offset_start) / encryed_length;

    IBuffer EnSessionKey = SymBlob.AsBuffer(offset_start, encryed_length);
    Debug.WriteLine(BitConverter.ToString(EnSessionKey.ToArray()));
    // Failed nex line with "Value does not fall within the expected range"  
    IBuffer keydeBlobSlic = CryptographicEngine.Decrypt(Prvkey, EnSessionKey, null); 
    Debug.WriteLine(BitConverter.ToString(keydeBlobSlic.ToArray()));


    SymmetricKeyAlgorithmProvider symAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbc);
    CryptographicKey key = symAlg.CreateSymmetricKey(keydeBlobSlic);
    // ...
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...