Сбой PCLCrypto асимметричного шифрования с открытым открытым ключом с нулевым заполнением

Запуск следующего кода завершается ошибкой. Когда я импортирую открытый ключ, кажется, что один из параметров RSA дополняется начальным нулем, вызывая publickKey быть 520 бит вместо 512 бит privateKey,

public static void Test()
{
    var algorithm = WinRTCrypto.AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithm.RsaPkcs1);
    ICryptographicKey privateKey = algorithm.CreateKeyPair(512);
    byte[] publicKeyBytes = privateKey.ExportPublicKey(CryptographicPublicKeyBlobType.X509SubjectPublicKeyInfo);
    ICryptographicKey publicKey = algorithm.ImportPublicKey(publickKeyBytes, CryptographicPublicKeyBlobType.X509SubjectPublicKeyInfo);

    var encryptedValue = WinRTCrypto.CryptographicEngine.Encrypt(publicKey, Encoding.UTF8.GetBytes("test"));
    var decryptedValue = WinRTCrypto.CryptographicEngine.Decrypt(privateKey, encryptedValue);
}

Проблема, кажется, заключается в следующем:

algorithm.ImportPublicKey(publickKeyBytes, CryptographicPublicKeyBlobType.X509SubjectPublicKeyInfo);

publicKeyBytes кажется правильным. Он работает против другого сервиса, который использует его для шифрования некоторых данных, которые я могу успешно расшифровать. Эта проблема возникает, когда я пытаюсь создать фиктивные зашифрованные данные для модульного тестирования.

Я запускаю этот код в Portable Class Library, используя.Net Framework 4.5.

Приведенный выше код выдает строку, в которой он пытается расшифровать System.Security.Cryptography.CryptographicExceptionсо следующим сообщением:

Данные для дешифрования превышают максимум для этого модуля в 64 байта.

Следующее утверждение не выполняется:

Assert.Equals(privateKey.KeySize, publicKey.KeySize)

Выполнение следующего удаления удаленного нуля из модуля исправляет открытый ключ, и все работает нормально.

RSAParameters rsaPublicParameters = publicKey.ExportParameters(false);
rsaPublicParameters.Modulus = rsaPublicParameters.Modulus.Skip(1).ToArray();
ICryptographicKey workingPublicKey = algorithm.ImportParameters(rsaPublicParameters);

Это ошибка в PCLCrypto или я использую это неправильно.

0 ответов

Другие вопросы по тегам