저장 한 자격 증명을 사용할 수있는 특정 Windows 응용 프로그램을 자동화하기 위해 Windows 저장된 자격 증명 관리를위한 advapi32.dll
에 대한 API 호출을 사용하여 작업하고 있습니다.COM에서의 관리되지 않는 유니 코드 문자열 SecureString에 대한 작업 할당 자 메모리
언제든지 암호에 포함 된 텍스트와 상호 작용할 필요가 없으므로 SecureString
암호를 사용하도록 코드를 업데이트하려고합니다. 따라서 응용 프로그램이 일반 텍스트로 암호를 보유하지 않으면 더 안전해야합니다. . 이 응용 프로그램에 다시 그 정보를 읽어 올 때
var unmanagedPassword = Marshal.SecureStringToCoTaskMemUnicode(userCredential.Password);
그러나, 나는 방법을 찾을 수 없습니다 : 나는 API에 전달하는 COM 작업 할당 메모리에 SecureString을 마샬링 할 수 있어요
는 통화를 해당 관리되지 않는 문자열을 SecureString
으로 마샬링하고 문자열을 관리되는 메모리로 복사하지 않고 문자열이나 바이트 배열로 가져옵니다.
내가 간과하는 안전한 방법이 있습니까?
downvoter는이 질문이 원하는 결과없이 "왜 작동하지 않는"질문인지 설명해 주시겠습니까? 내가 할 수있는 방법을 찾을 수없는 일을하는 법을 묻습니다. 나는 내가 필요한 것을 분명히 지정했다고 생각한다. 관리되지 않는 메모리에서 새 SecureString을 만들려면 – Ashigore
호기심의 감독입니다. 가장 간단한 방법은 (관리되지 않는 코드없이)'Marshal.ReadInt16()'에 대한 루프에서'.AppendChar()'를 호출하는 것입니다 (유니 코드 문자열이라고 가정). 'char *'와 길이를 취하는 안전하지 않은 생성자도있다. 관리되지 않는 메모리는 0으로 설정하고 할당을 해제해야합니다. 그렇지 않으면 모든 데이터가 일반 텍스트로 계속 떠있는 상태에서 'SecureString'을 사용하면 별 의미가 없습니다. –
고마워요 @ JeroenMostert, 그 트릭을 했어! – Ashigore