Расшифровка данных RSA в .NET только с несколькими значениями - PullRequest
5 голосов
/ 20 июля 2011

Я использую реализацию Javascript RSA с этой веб-страницы , и там я сгенерировал свою пару ключей.Таким образом, у меня есть p, q, открытый показатель степени, открытый модуль по модулю, частный показатель степени и частное обратное значение.

Как я могу использовать .NET RSACryptoServiceProvider для дешифрования только зашифрованного текстаэти значения?Документы .NET содержат три других поля;DP, DQ и InverseQ, которые я не уверен, как поставить.

Ответы [ 2 ]

5 голосов
/ 21 июля 2011

Есть два представления для закрытого ключа RSA (см. PKCS # 1 ).

Первое представление состоит из пары (n, d), второе представление состоит изпятикратный (p, q, dP, dQ, qInv).Открытый ключ представлен как (n, e).

  • n - открытый модуль
  • p и q - два простых числа
  • d - частный показатель
  • e - публичный показатель
  • dP - коэффициент теоремы китайского остатка p (e · dP (1 (mod (p - 1))) *
  • dQ - коэффициент CRT q(e · dQ ≡ 1 (mod (q - 1)))
  • qInv - коэффициент CRT, положительное целое число меньше p, такое что q · qInv ≡ 1 (mod p)

Каждое из двух представлений закрытого ключа является «полным», т. Е. Вам нужно только одно из них, чтобы иметь возможность выполнять вычисления RSA.Поскольку у вас есть все, что необходимо для первого представления, достаточно установить эти параметры (т. Е. N, p, q, e, d) только для вашего экземпляра RSAParameters и пропустить остальные.

1 голос
/ 20 июля 2011

Эта страница Википедии , кажется, содержит инструкции о том, как рассчитать эти параметры, а именно:

Значения dp, dq и qInv, которые являются частью закрытого ключа, вычисляютсяследующим образом:

dp = d mod (p − 1)
dq = d mod (q − 1)
qInv = q^−1 mod p
...