Отказ от ответственности: Я знаю Java и криптографию, но мои знания C # и .NET очень ограничены. Я пишу здесь только под влиянием моих навыков Google-фу.
Если предположить, что вы могли бы декодировать закрытый ключ RSA в кодировке PKCS # 8, то из того, что я прочитал в MSDN, остальная часть кода должна выглядеть следующим образом:
byte[] hv = MD5.Create().ComputeHash(data);
RSACryptoServiceProvider rsp = new RSACryptoServiceProvider();
RSAParameters rsp = new RSAParameters();
// here fill rsp fields by decoding pkcs8PrivateKey
rsp.ImportParameters(key);
RSAPKCS1SignatureFormatter rf = new RSAPKCS1SignatureFormatter(rsp);
rf.SetHashAlgorithm("MD5");
byte[] signature = rf.CreateSignature(hv);
Соответствующие классы находятся в пространстве имен System.Security.Cryptography
.
Что касается декодирования ключевого объекта PKCS # 8 (т.е. заполнения полей rsp
), я обнаружил эту страницу , которая описывает утилиту командной строки в C #, которая может выполнять эту работу. Исходный код предоставляется и представляет собой один файл C #. Из того, что я прочитал в нем, этот код декодирует файл PKCS # 8 «вручную»; косвенно это должно означать, что в raw .NET (2.0) нет средств для декодирования файла ключей PKCS # 8 (в противном случае автор этого инструмента не стал бы сталкиваться с проблемой реализации такого декодирования). Для выполнения поставленной задачи вы можете извлечь из этого исходного файла те части, которые вам нужны, пропуская что-либо о PEM и симметричном шифровании; вашей точкой входа будет функция DecodePrivateKeyInfo()
, которая, очевидно, ожидает кодированный DER-файл незашифрованный файл PKCS # 8, как и Java PKCS8EncodedKeySpec
.
.