2016-07-10 4 views
3

Я пытаюсь зашифровать файл с помощью RSA, но у него нет методов toXmlString() и fromXmlString. как использовать RSA класс в .net core? И я хочу зашифровать с помощью закрытого ключа и дешифровать с помощью открытого ключа, чтобы другие могли читать только этот файл, но не могут сгенерировать этот файл, возможно ли это?Как использовать RSA в .net Core

+0

Не можете ли вы использовать другие методы, которые доступны? – svick

+0

все, что я нашел в Интернете, все они используют метод 'fromXmlString'. Можете ли вы показать мне другой путь? – John

+1

Вы можете использовать расширение, подобное этому: https://gist.github.com/Jargon64/5b172c452827e15b21882f1d76a94be4/ –

ответ

3

Хотя ToXmlString и FromXmlString методы не доступны, ImportParameters(RSAParameters) и ExportParameters(bool) есть.

Если существующие XML отформатирован значения, которые вы должны продолжать читать, формат XML клавиш не очень интересно:

Public только:

<RSAKeyValue> 
    <Modulus>[base64-encoded value]</Modulus> 
    <Exponent>[base64-encoded value]</Exponent> 
</RSAKeyValue> 

Public + Private:

<RSAKeyValue> 
    <Modulus>[base64-encoded value]</Modulus> 
    <Exponent>[base64-encoded value]</Exponent> 
    <P>[base64-encoded value]</P> 
    <Q>[base64-encoded value]</Q> 
    <DP>[base64-encoded value]</DP> 
    <DQ>[base64-encoded value]</DQ> 
    <InverseQ>[base64-encoded value]</InverseQ> 
</RSAKeyValue> 

(где каждый элемент с именем XML карты на поле с тем же именем на RSAParameters структуры)

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

+0

Я создаю свои собственные 'ToXMlString' и' FromXmlString' с 'exportParameters' и' ImportParameters', он отлично работает, но который не может использовать секретный ключ для шифрования и открытого ключа для дешифрования, любых предложений? – John

+3

@John Закрытый ключ может шифроваться, поскольку он имеет общедоступный, но открытый ключ не может расшифровывать. Использование закрытого ключа для подтверждения подлинности называется подписыванием, поэтому, возможно, вам нужны SignData и VerifyData, в отличие от Encrypt и Decrypt. – bartonjs

+0

Возможно, вы понимаете, что я хочу написать файл лицензии, эта лицензия является зашифрованным файлом xml (двоичный formate) содержит некоторую необходимую информацию. Моему приложению нужна эта информация для запуска и что-то делать. Поэтому мне действительно нужно зашифровать и расшифровать это, в настоящее время я использую AES для шифрования этого файла, но если кто-то декомпилирует мое приложение, они получат ключ AES, чтобы они могли легко сгенерировать любую лицензию, которую хотите. – John

2

В настоящее время вы получите меньше при использовании чистого .net ядра:

В конце концов, это означает, что вы можете построить на .NET Ядра сегодня, и ожидать больше функции, чтобы осветить позже, так что все будет легче как раз продолжается. Если вы хотите стать одним из ранних с меньшими признаками рамок ныне, или прыгать позже, когда другие функции были добавлены и третья сторона эко-система догнали собираемся быть (жестким) решение, которое мы все должны сделать самостоятельно.

Вы будете иметь их доступными, если вы нацелитесь на полную инфраструктуру .net в ядре .net.

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
    "NETStandard.Library": "1.6.0" 
    }, 

    "frameworks": { 
    "net461": {} 
    } 
} 

Они не будут доступны, например:

"frameworks": { 
    "netcoreapp1.0": { 
     "imports": [ 
     "dotnet5.6", 
     "portable-net45+win8" 
     ] 
    } 
    }, 
Смежные вопросы