[C++/DLL] Windows 7, szyfrowanie, inne wyniki

0

Witam.

Stworzyłem bibliotekę DLL, która oferuje proste metody szyfrowania ( przesunięcia kodów ASCII ).

Testowałem aplikację na Windows XP, wszystko było w porządku.

Uruchomiłem program pod Windows 7 i pojawił się dziwny problem.

Otóż, funkcja z biblioteki DLL szyfruje tylko cyfry oraz znaki specjalne, natomiast znaków a-z i A-Z już niestety nie. Nie mam pojęcia dlaczego tak się dzieje. Nie są to jakieś skomplikowane algorytmy, tylko przesunięcie kodu ASCII o dany offset.

Przykład błędnego wyniku szyfrowania :

Dane do zaszyfrowania : ALAMAKOTA12345

Wynik : ALAMAKOTA83756

Część łańcucha "ALAMAKOTA" powinna zostać zaszyfrowana - Windows XP nie ma z tym problemu

Export funkcji z biblioteki

string __stdcall encrypt_code(string _authentication_code)

Nagłówek funkcji

string encrypt_code(string _authentication_code)

Fragment funkcji szyfrującej

for(int i=0; i < CODE_LEN; i++)
    {
        sign = _code[i];

        if ((sign>=65)&&(sign<=90))
        {
            sign-=65;
            sign+=_offset;
            sign=(char)fmod(sign,26);
            sign+=65;

            _code_enc[i] = sign;
        }
        else if ((sign>=97)&&(sign<=122))
        {
            sign-=97;
            sign+=_offset;
            sign=(char)fmod(sign,26);
            sign+=97;

            _code_enc[i] = sign;
        }
        else if ((sign>=48)&&(sign<=57))
        {
            sign-=48;
			sign+=13;
            sign=(char)fmod(sign,10);
            sign+=48;

            _code_enc[i] = sign;
        }
        else
        {
            switch(sign)
            {
                case '.':
                    _code_enc[i] = '@';
                    break;
                case '/':
                    _code_enc[i] = '$';
                    break;
                default:
                    _code_enc[i] = sign;
            }
        }
    }

Przecież to są proste operacja na znakach ( operuje na zmiennych typu string )

Macie jakiś pomysł co może być nie tak ?

Z góry dzięki za wskazówki.

Pozdrawiam.

0

Muszę dodać kilka nowych informacji :-).

Zapomniałem dodać, że używam również biblioteki wxWidgets.

Napisałem na szybko aplikację konsolową, która korzysta z mojej biblioteki DLL i pod Windows 7 wszystko działa w porządku. Tak więc moja biblioteka jest niewinna :-).

Może chodzi o kodowanie znaków, które pobieram z formularzy utworzonych za pomocą wxWidgets ?

0

Przepraszam, że kolejny post, ale udało mi się uzyskać dodatkowe informacje.

Prześledziłem dokładnie jak DLL-la zachowuje się pod WinXP a jak pod Win7.

Problem pojawia się przy działaniu z funkcją :

fmode()

Pod Win7, znak ASCII przechodzi przez ten fragment :

            sign-=97;
            sign+=_offset;
            sign=(char)fmod(sign,26);
            sign+=97;

i pozostaje w oryginalnej postaci.

Udało się znaleźć informację, mówiącą o tym, że funkcji fmod() nie działa poprawnie pod Windows 7.

Macie jakiś pomysł - oprócz własnej implementacji działania funkcji fmod, bo do tego powoli się zabieram :).

Dzięki wielkie za wszelką pomoc.

Pozdrawiam

0

Macie jakiś pomysł - oprócz własnej implementacji działania funkcji fmod, bo do tego powoli się zabieram

A operator % ci nie wystarczy? Przeciez kody ascii raczej ułamkami nie są.

0

w 100% sie zgadzam.. "sign % 26" i juz

a fmod'a z ciekawosci sprawdze, mam akurat win7 na firmowym

1 użytkowników online, w tym zalogowanych: 0, gości: 1