Como converter String
para SecureString
?
c#
.net
security
securestring
Desenvolvedor404
fonte
fonte
12345
... esse é o tipo de coisa que um idiota tem na bagagem!"*****
AppendChar
não é executado até o tempo de execução; portanto, esses caracteres ainda podem ser lidos na IL, correto? Talvez alguma ofuscação em tempo de compilação ajude também ... isto é, se você estiver codificando senhas.Também há outra maneira de converter entre
SecureString
eString
.1. String para SecureString
2. SecureString para String
Aqui está o link
fonte
SecureString
se seu código criar umstring
objeto com o valor que você deseja proteger. O objetivoSecureString
é evitar ter a sequência na memória gerenciada, para que um invasor examine essa memória para identificar o valor que deseja ocultar. Como oNetworkCredential
construtor que você está chamando exige uma string, esse não é o caminho a percorrer ... Claro, seu código é uma maneira fácil de converter de e para um SecureString, mas usá-lo torna seu código tão seguro quanto usar um simplesstring
SecureString
quando estiver trabalhando com algumas bibliotecas. E vamos ser honestos aqui, se alguém estiver examinando ativamente a memória do seu aplicativo, então você já perdeu. Mesmo se você tiver usado o SecureString corretamente, o que nunca vi, haverá outros dados valiosos para extrair.O método abaixo ajuda a converter a string em uma string segura
fonte
Você pode seguir isto:
fonte
Aqui está um truque barato de linq.
fonte
Vou jogar isso lá fora. Por quê?
Você não pode simplesmente alterar todas as suas strings para protegê-las e, de repente, seu aplicativo é "seguro". A cadeia segura foi projetada para manter a cadeia criptografada pelo maior tempo possível e somente descriptografada por um período muito curto, limpando a memória após a execução de uma operação nela.
Eu arriscaria dizer que você pode ter alguns problemas no nível de design antes de se preocupar em proteger as seqüências de caracteres do aplicativo. Dê-nos mais algumas informações sobre o que você está tentando fazer e podemos ajudar melhor.
fonte
fonte
sem linq chique, sem adicionar todos os caracteres à mão, pura e simplesmente:
fonte
var sc = new SecureString(); foreach(char c in "foo") sc.appendChar(c);
Estou de acordo com Spence (+1), mas se você estiver aprendendo ou testando pourposes, poderá usar um foreach na string, anexando cada caractere ao securestring usando o método AppendChar.
fonte
Eu só quero salientar a todo o povo dizendo: "Isso não é o ponto de
SecureString
", que muitas das pessoas fazendo esta pergunta pode estar em uma aplicação onde, por qualquer motivo, justificado ou não, eles são não particularmente preocupado sobre ter uma cópia temporária da senha fica na pilha como uma sequência capaz de GC, mas eles precisam usar uma API que aceite apenasSecureString
objetos. Então, você tem um aplicativo em que não se importa se a senha está no heap, talvez seja apenas para uso interno e a senha só esteja lá porque é necessária pelos protocolos de rede subjacentes e você descobre que a sequência em que a senha está armazenada não pode ser usada para, por exemplo, configurar um PowerShell Runspace remoto - mas não há uma linha única fácil e direta para criar essaSecureString
isto que você precisa. É um pequeno inconveniente - mas provavelmente vale a pena para garantir que as aplicações que realmente fazer precisaSecureString
não tempt os autores ao usoSystem.String
ouSystem.Char[]
intermediários. :-)fonte
Se você deseja compactar a conversão de a
string
em aSecureString
em umaLINQ
instrução, pode expressá-la da seguinte maneira:No entanto, lembre-se de que o uso
LINQ
não melhora a segurança desta solução. Ele sofre da mesma falha que qualquer conversão destring
paraSecureString
. Enquanto o originalstring
permanecer na memória, os dados estarão vulneráveis.Dito isto, o que a declaração acima pode oferecer é manter junto a criação do
SecureString
, sua inicialização com os dados e, finalmente, impedi-lo de modificar.fonte
As 2 extensões a seguir devem fazer o truque:
Para uma
char
matrizE para
string
Obrigado a John Dagg pela
AppendChar
recomendação.fonte
você pode usar esse script simples
fonte