문제

XP와 Vista 간에 "CryptUnprotectData"(Crypt32.dll에서 노출됨)에 대한 동일한 호출을 사용하고 있습니다.XP에서는 잘 작동합니다.Vista에서 실행할 때 다음 예외가 발생합니다.

"Decryption failed. Key not valid for use in specified state."

예상한 대로 crypt32.dll의 버전은 XP와 Vista 간에 다릅니다(XP는 실제로 SP3이나 다른 업데이트의 결과로 더 최신 버전을 가지고 있을 수 있습니다).

더 구체적으로 말하자면, 데이터를 암호화하여 레지스트리에 넣은 다음 "CryptUnprotectData"를 사용하여 읽고 해독합니다.UAC가 꺼져 있습니다.

이거 전에 본 사람 있어?

도움이 되었습니까?

해결책

그만큼 CryptUnprotectData 함수 문서에는 일반적으로 사용자가 암호화기와 동일한 로그온 자격 증명을 가지고 있는 경우에만 작동한다고 명시되어 있습니다.

이는 키가 사용자의 현재 토큰에 연결되어 있을 수 있음을 시사합니다.Vista를 언급하셨으니 UAC와 제한된 토큰이 생각나네요.

몇 가지 코드를 보여주실 수 있나요?데이터로 무엇을 하고 있는지에 대한 자세한 정보를 제공해 주실 수 있나요?프로세스, 사용자 또는 컴퓨터 간에 이동하고 있습니까?

다른 팁

멋진.바라건대 이것이 이번 주 나의 뼈머리 움직임이기를 바랍니다!;-)

이것은 키가 사용자의 현재 토큰에 묶여 있음을 제시합니다.

그거였다.알고 보니 다른 컴퓨터(XP 컴퓨터)의 암호화된 데이터를 사용하고 Vista 컴퓨터에서 암호를 해독하려고 했습니다.

MSDN 문서에 따르면 다음과 같습니다.

일반적으로 암호화와 동일한 로그온 자격 증명을 가진 사용자 만 데이터를 해독 할 수 있습니다.게다가, 동일한 컴퓨터에서 암호화 및 암호 해독을 수행해야합니다.

Vista 컴퓨터에서 데이터를 다시 암호화하면 암호 해독이 예상대로 작동합니다.

감사해요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top