Как Генерировать Уникальный и Закрытый ключ С открытым ключом через RSA

Одна техника, предложенная эта статья , состояла бы в том, чтобы сделать это:


64
задан svick 30 January 2013 в 13:12
поделиться

2 ответа

В итоге я создал новое имя KeyContainer на основе текущего DateTime (DateTime.Now.Ticks.ToString ()) всякий раз, когда мне нужно создать новый ключ и сохранить контейнер. имя и открытый ключ к базе данных. Кроме того, всякий раз, когда я создаю новый ключ, я делаю следующее:

public static string ConvertToNewKey(string oldPrivateKey)
{

    // get the current container name from the database...

    rsa.PersistKeyInCsp = false;
    rsa.Clear();
    rsa = null;

    string privateKey = AssignNewKey(true); // create the new public key and container name and write them to the database...

       // re-encrypt existing data to use the new keys and write to database...

    return privateKey;
}
public static string AssignNewKey(bool ReturnPrivateKey){
     string containerName = DateTime.Now.Ticks.ToString();
     // create the new key...
     // saves container name and public key to database...
     // and returns Private Key XML.
}

перед созданием нового ключа.

8
ответ дан 24 November 2019 в 15:44
поделиться

Конструктор RSACryptoServiceProvider (CspParameters) создает пару ключей, которая хранится в хранилище ключей на локальном компьютере. Если у вас уже есть пара ключей с указанным именем, будет использоваться существующая пара ключей.

Похоже, вы не заинтересованы в хранении ключа на машине.

Поэтому используйте 1149275] RSACryptoServiceProvider (Int32) конструктор:

public static void AssignNewKey(){
    RSA rsa = new RSACryptoServiceProvider(2048); // Generate a new 2048 bit RSA key

    string publicPrivateKeyXML = rsa.ToXmlString(true);
    string publicOnlyKeyXML = rsa.ToXmlString(false);
    // do stuff with keys...
}

РЕДАКТИРОВАТЬ:

В качестве альтернативы попробуйте установить для PersistKeyInCsp значение false:

public static void AssignNewKey(){
    const int PROVIDER_RSA_FULL = 1;
    const string CONTAINER_NAME = "KeyContainer";
    CspParameters cspParams;
    cspParams = new CspParameters(PROVIDER_RSA_FULL);
    cspParams.KeyContainerName = CONTAINER_NAME;
    cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
    cspParams.ProviderName = "Microsoft Strong Cryptographic Provider";
    rsa = new RSACryptoServiceProvider(cspParams);

    rsa.PersistKeyInCsp = false;

    string publicPrivateKeyXML = rsa.ToXmlString(true);
    string publicOnlyKeyXML = rsa.ToXmlString(false);
    // do stuff with keys...
}
24
ответ дан 24 November 2019 в 15:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: