2017-10-19 12 views
1

WPF 응용 프로그램을 작성할 때 PasswordBox은 입력 된 암호를 SecureString으로 저장합니다. 이것은 완전히 의미가 있습니다. 그러나 HTTP API를 통해 암호를 보내고 싶습니다. HttpClient PostAsync는 양식으로 인코딩 된 데이터의 문자열을 허용하는 것 같습니다.C# 및 WPF - 클라이언트 측 HTTP API 암호에 SecureString 사용

나는 다른 사람들이 관련 질문, 특히 Is SecureString ever practical in a C# application?을 요구 한 것을 알고,하지만 난 처음 String로 변환하지 않고는 HTTP 엔드 포인트에이 SecureString를 보낼 수있는 만족스러운 방법을 발견하지 않았습니다. 변환은 처음에 SecureString의 개체를 완전히 무효로합니다 (일반 텍스트를 다시 관리되는 메모리에 저장하기 때문에).

정식으로 올바른 (그리고 간단하고 직설적 인) 방법이 있습니까?

완전한 공개를 위해 - 나는 HTTP API를 제어 할 권한이 없다.

답변

1

나는 완벽하지 않지만, 당신을위한 최고의 솔루션이 this 답변을 rdev5에 의해 게시 DecryptSecureString 방법을 사용하는 것 (결국, 암호가 어쨌든 네트워크를 통해 일반 텍스트로 옮겨진되고있다)이다,라고 생각

rdev5의 방법은 SecureString을 문자열로 해독하고, 비밀번호로 처리하도록 지시 한 다음 메모리에서 지우십시오. 이렇게하면 암호가 메모리에있는 창과 그곳에서 엿볼 수있는 시간이 줄어 듭니다.

Strings.DecryptSecureString(secureString, (password) => 
{ 
    // Do your API call here 
}); 

P. : 원래 게시물에서 지적했듯이 password의 콘텐츠를 다른 곳에 저장하지 않도록주의하십시오.

+0

전 세계적으로 이상적은 아니지만 'DisposableString'유형이 부족하다는 문제를 해결합니다. 정말 고마워요. HTTP API는 보안 연결이므로 비밀 번호는 기술적으로 일반 텍스트로 전송되지 않습니다. –