Zie deel 1 Unix password encryptie vraagje
Helaas is mn topicje gesloten, en mss wel terecht, maar ik heb toch nog even een vraag hieromtrent.
Goed, eerst maar even mn code:
- m_data is een QCString met het wachtwoord (het gecodeerde wachtwoord komt ook weer terug in m_data).
- des_set_key() en des_encrypt() zijn 3rd party DES functies
De rest spreekt voor zich.
En dan nu de vraagen:
- Wat moet ik in vredesnaam met dit 'salt' doen? Ik weet dat het de eerste twee bytes moeten vormen van het resultaat maar het moet óók het wachtwoord moduleren, hoe?
- Het komt natuurlijk vaak voor dat het wachtwoord langer is dan 8 bytes en aangezien DES blokken van 8 bytes eet, valt in mijn w.w. de rest dus weg.
En ja, ik ben al de halve middag bezig met zoeken op Google.
Bedankt!
Helaas is mn topicje gesloten, en mss wel terecht, maar ik heb toch nog even een vraag hieromtrent.
Goed, eerst maar even mn code:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| bool Password::cryptUNIX_DES( char* salt) { des_context ctx; unsigned char output[8]; unsigned char pw[8]; unsigned char input[8]; bzero( input, 8 ); bzero( output, 8 ); /* het wachtwoord kopieëren naar pw. is het korter dan 8 bytes -> null fillen, langer dan acht bytes -> truncate */ uint l; if( m_data.length() > 8 ) l = 8; else l = m_data.length(); memcpy( pw, m_data.data(), l ); if( l < 8 ) memset( pw, 0, 8 - l ); //pw[0] ^= salt[0]; //pw[1] ^= salt[1]; /* De key zetten, duh */ des_set_key( &ctx, pw ); /* 25x DES'en */ for(uint i =0; i < 25; i++) { des_encrypt( &ctx, input, output ); memcpy( input, output, 8 ); } /* Deze troep is een beetje overbodig, let daar maar even niet op */ unsigned char result[9]; result[8] ='\0'; memcpy( result, output, 8 ); /* Het resultaat base64'en, en ja, deze casting shit is stupide */ m_data =Base64::encode( QString((const char*)result) ).data(); /* Alleen nog even het salt aan de voorkant van het resultaat zetten */ m_data =QCString(salt, 3) + m_data; return true; } |
- m_data is een QCString met het wachtwoord (het gecodeerde wachtwoord komt ook weer terug in m_data).
- des_set_key() en des_encrypt() zijn 3rd party DES functies
De rest spreekt voor zich.
En dan nu de vraagen:
- Wat moet ik in vredesnaam met dit 'salt' doen? Ik weet dat het de eerste twee bytes moeten vormen van het resultaat maar het moet óók het wachtwoord moduleren, hoe?
- Het komt natuurlijk vaak voor dat het wachtwoord langer is dan 8 bytes en aangezien DES blokken van 8 bytes eet, valt in mijn w.w. de rest dus weg.
En ja, ik ben al de halve middag bezig met zoeken op Google.
Bedankt!
[ Voor 6% gewijzigd door phaas op 07-02-2005 17:51 ]