Я был над статьей в CodeProject а на некоторое время, что объясняет, как зашифровать и расшифровать с помощью поставщика RSA:ключ шифрования Public с RSACryptoServiceProvider
Хотя старая версия с 2009 года был багги, новая версия 2012 года (с поддержкой System.Numerics.BigInteger) кажется более надежной. Что в этой версии не хватает, хотя это способ зашифровать с ключом общественного и расшифровка с помощью ключа частного.
Итак, я попробовал это сам, но получаю мусор, когда дешифрую. Я не знаком с провайдером RSA, поэтому я здесь в темноте. Трудно найти больше информации о том, как это должно работать.
Кто-нибудь видит, что в этом плохого? Ниже ШИФРОВАНИЕ с открытым ключом:
// Add 4 byte padding to the data, and convert to BigInteger struct
BigInteger numData = GetBig(AddPadding(data));
RSAParameters rsaParams = rsa.ExportParameters(false);
//BigInteger D = GetBig(rsaParams.D); //only for private key
BigInteger Exponent = GetBig(rsaParams.Exponent);
BigInteger Modulus = GetBig(rsaParams.Modulus);
BigInteger encData = BigInteger.ModPow(numData, Exponent, Modulus);
return encData.ToByteArray();
ли я использовать большой «D» от поставщика, когда я это делаю? Наверное, нет, поскольку это открытый ключ, который не имеет «D».
Тогда аналог (дешифрования с помощью закрытого ключа):
BigInteger numEncData = new BigInteger(cipherData);
RSAParameters rsaParams = rsa.ExportParameters(true);
BigInteger D = GetBig(rsaParams.D);
//BigInteger Exponent = GetBig(rsaParams.Exponent);
BigInteger Modulus = GetBig(rsaParams.Modulus);
BigInteger decData = BigInteger.ModPow(numEncData, D, Modulus);
byte[] data = decData.ToByteArray();
byte[] result = new byte[ data.Length - 1 ];
Array.Copy(data, result, result.Length);
result = RemovePadding(result);
Array.Reverse(result);
return result;
мне нужен "D" или экспоненту здесь делать?
Очевидно, мне нужен криптографический режим для работы в частном порядке публично-частный. Любая помощь очень ценится!
элемент 'D' не найден открытым ключом. он устанавливается только при использовании закрытого ключа для дешифрования, и, таким образом, ваш пример завершится неудачей, если частный ключ не будет распространен вместе с приложением. –
uhm ... может быть, факт, что вы не можете расшифровать с помощью закрытого ключа, когда у вас его нет ... да ... что это связано с примером вычисления, который просто показывает, как делать математику за RSA? – DarkSquirrel42
Неправильно, вы можете расшифровать данные, которые были зашифрованы с помощью закрытого ключа, используя открытый ключ ТОЛЬКО в процессе дешифрования. В приведенном выше примере требуется секретный ключ независимо от того, расшифровывается ли дешифрование с использованием открытого или закрытого для дешифрования. Пожалуйста, взгляните на свой образец, и вы поймете. Для всех вам необходимо, чтобы ОБА публично и конфиденциально работали над любым из ваших методов расшифровки, что неверно. –