[c++] C# implementatie omzetten naar c++ -> hoe?

Pagina: 1
Acties:

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 22:10
Voor een kleine applicatie moet ik een (simpel) authenticatie gedeelte uit C# omzetten naar C++.
Het volgende gebeurt in C#:

C#:
1
2
3
4
5
6
7
8
9
10
// Aan de functie wordt de string fingerPrint mee gegeven
string test(string fingerPrint)
{
    UnicodeEncoding enc = new UnicodeEncoding();
    HashAlgorithm alg = new MD5CryptoServiceProvider();

    byte[] fingerPrintData = enc.GetBytes(fingerPrint);

    return Convert.ToBase64String(alg.ComputeHash(fingerPrintData));
}


Het omzetten van een byte array naar een base64 string lukt me wel, maar voor het omzetten van een string naar een unicode array kan ik niets zinnigs vinden. Waar ik ook op zoek, ik krijg alleen maar implementaties voor .net (c++), geen native c++...

...


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:10

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat bedoel je met een string? Wat heb je al?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • IceM
  • Registratie: Juni 2003
  • Laatst online: 22:10
wat ik met een string bedoel?
C++:
1
2
3
4
5
6
7
8
9
10
#include <string>

using namespace std;

void Auth::Auth(string fingerPrint) 
{
    // TODO: convert string to unicode array and get md5 hash

    fingerPrint = base64_encode(reinterpret_cast<const unsigned char*>(fingerPrint.c_str()), fingerPrint.length());
}

De base64 implementatie heb ik hier vandaan. Een werkende md5 implementatie die doet wat ik wil moet ook te vinden zijn lijkt me, maar ik weet alleen niet hoe ik om moet gaan met het omzetten van de string naar een unicode character array...

...


  • Ruudjah
  • Registratie: November 1999
  • Laatst online: 06-09 20:58

Ruudjah

2022

DIT BERICHT IS PREVENTIEF VERWIJDERD DOOR DE GEBRUIKER

[ Voor 108% gewijzigd door Ruudjah op 02-12-2009 00:00 ]

TweakBlog


  • IceM
  • Registratie: Juni 2003
  • Laatst online: 22:10
Ruudjah schreef op maandag 16 juni 2008 @ 22:02:
Da's toch zo in elkaar gehackt? Paar watches op je variabelen, hier en daar een debug output en je weet hoe die string en unicode char array in elkaar zit (en dus kan je afleiden hoe je de conversieslag implementeerd).
Of ik moet iets over het hoofd zien.
Euh .. ja, sorry. Het enige wat dat ding doet is na elke byte een lege byte toevoegen :/. Ben een beetje moe denk ik..

...


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:10

.oisyn

Moderator Devschuur®

Demotivational Speaker

IceM schreef op maandag 16 juni 2008 @ 22:38:
[...]


Euh .. ja, sorry. Het enige wat dat ding doet is na elke byte een lege byte toevoegen :/. Ben een beetje moe denk ik..
Voor ANSI characters (0..127) idd wel, daarboven hoeft dat niet per se. Onder Windows kan het vrij gemakkelijk met MultiByteToWideChar(). Het unicode character type in C++ is trouwens wchar_t. Vandaar ook mijn vraag, als je string een wchar_t* of een std::wstring was dan was ie al unicode.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 01-11 22:03

leuk_he

1. Controleer de kabel!

byte conversies:

"ATL and MFC String Conversion Macros " levert op:

http://msdn.microsoft.com/en-us/library/87zae4a3(VS.80).aspx

[ Voor 25% gewijzigd door leuk_he op 17-06-2008 10:41 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:10

.oisyn

Moderator Devschuur®

Demotivational Speaker

Link werkt niet.

Op de C++ manier tot slot nog even:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
#include <locale>

std::wstring convert(const std::string & str)
{
    // initialize converter from current locale
    typedef std::codecvt<wchar_t, char, std::mbstate_t> cvt_t;
    std::locale l;
    const cvt_t & cvt = std::use_facet<cvt_t>(l);

    // get number of conversions
    std::mbstate_t state;
    int len = cvt.length(state, str.data(), str.data() + str.size(), str.size());

    // initialize our return string
    std::wstring wstr(len, ' ');

    // convert the characters
    const char * pInEnd;
    wchar_t * pOutEnd;
    cvt.in(state, str.data(), str.data() + str.size(), pInEnd, &wstr[0], &wstr[0] + wstr.size(), pOutEnd);

    wstr.resize(pOutEnd - wstr.data()); // should be a no-op, but you never know ;)
    return wstr;
}

int main()
{
    std::wcout << convert("Hallo daar!") << std::endl;
}

8)7

[ Voor 11% gewijzigd door .oisyn op 16-06-2008 23:22 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • IceM
  • Registratie: Juni 2003
  • Laatst online: 22:10
Bedankt voor de uitleg oisyn, hiermee moet het lukken.

...

Pagina: 1