문제

VB6에는 암호 해독 루틴이 있습니다. 이제 C#에서 동일한 암호 해독을 원합니다. 암호 해독이 필요한 문자열은 유니 코드에 있으므로 encoding.unicode.getString을 사용하여 C#의 입력을 읽습니다. 입력은 이제 VB6과 정확히 동일하게 보입니다.

루프의 처음 몇 문자는 해독됩니다. 그런 다음 차이가 발생합니다 ... 프로그램은 VB6과 다른 인덱스로 캐릭터 '~'를 구문 분석합니다.

디버깅 할 때 VB와 .NET에서 다음을 볼 수 있습니다.
vb6 ~ = 코드 152
C# ~ = 코드 732

말할 것도없이, 암호 해독이 실패합니다. 위에서 언급 한 캐릭터에 대해서는 152를 받아야합니다.

여기서 뭐가 잘못 됐어?

문안 인사,

미셸

도움이 되었습니까?

해결책

귀하의 VB6은 유니 코드를 읽지 않았으며 (Windows-1252 CodePage에서 추측) 다른 문자 코드로 돌아 오는 이유입니다.

다른 팁

"문자 152"가 정확히 무엇을 의미합니까? 그 번호를 어떻게 얻었습니까?

"유니 코드"에 있다는 것은 많은 다른 것을 의미 할 수 있습니다. 이진 데이터에서 UTF-16으로 인코딩되었다고 확신합니까? 소스 데이터에 대해 더 많이 게시 할 수 있다면 매우 도움이 될 것입니다.

또한 암호화 및 암호 해독은 거의해야합니다 언제나 문자가 아닌 바이트를 사용하여 수행해야합니다. 레거시 동작을 재현해야한다는 것을 이해하지만 시간이 지남에 따라 문자열을 불투명 바이너리 데이터로 처리하지 않아야합니다.

나는 전에 이것을 해냈다. 문제는 인코딩에 있습니다. .NET이 유니 코드 인 경우 vb6은 unifail입니다.

.NET 측면에서는 encoding.ascii를 사용하여 문자열을 바이트 어레이로 변환하고 Versa Versa로 변환해야합니다.

Encoding.ASCII.GetString(decrypted);
//and
Encoding.ASCII.GetBytes(cleartext);

따라서 VB 앱으로 전송하기 위해 암호화 할 때는 ascii.getBytes를 사용한 다음 바이트 배열을 암호화해야하며 VB 측에서 바이트 배열을 가져 오면 해독하고 ascii.getString을 사용하여 바이트를 해독해야합니다. 사용 가능한 문자열로.

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