Попробуйте изменить реализацию GetRSAFromSnkBytes (byte []) в коде Wolfwyrd на:
private static RSACryptoServiceProvider GetRSAFromSnkBytes(byte[] snkBytes)
{
if (snkBytes == null)
throw new ArgumentNullException("snkBytes");
RSAParameters param = GetRSAParameters(snkBytes);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(param);
return rsa;
}
Я не совсем понимаю, почему он сначала генерирует ключ, а затем импортирует snk-ключ в контейнер, а не просто начинает с пустого контейнера ключей.
Вы могли бы также рассмотреть возможность использования .NET для генерации вашего ключа вместо использования snk-формата.
Если вы измените первую строку в вашем примере на
RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(1024);
ваш код также будет работать нормально (и вы можете сериализовать полученный ключ самостоятельно).