Мне нужно реализовать функцию расшифровки, подобную этой, в 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);
// ...
}