Nmap Development mailing list archives
Re: [NSE + NSELib] Netbios and SMB [stable!]
From: Sven Klemm <sven () c3d2 de>
Date: Mon, 06 Oct 2008 10:33:19 +0200
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi Ron,
|> I got the MD4() stuff working, and it's working well. But I'm having a
|> problem with the DES(), and it's probably my own fault for not knowing
|> OpenSSL well enough. I'm trying to encrypt the string "KGS!@#$%" using
|> the key "part1" (which is a 7-character string). But it's returning
|> 'nil'. Am I doing this wrong, and/or is there a way to tell what I'm
|> doing incorrectly?
|>
|> The 7-character string should have the parity bits set and become a
|> 8-character key, which is used to encrypt the constant string. That's
|> how I understand it to work, anyways.
|>
|> Here's the relevant code:
|> return openssl.encrypt("DES-ECB", part1, nil, "KGS!@#$%", false)
|>
|> Thanks!
|> Ron
|
| So, I got to the point where it'll return me an encrypted string, that
| was my own fault (wasn't returning the right variable). But I still
| can't get it to encrypt the string the way I want it. Again, this is
| likely due to a lack of my own understanding.
It expects to get an 8-byte string as DES keys are 8 byte but because
of the parity they only have 56 bits of information.
| This is how I do it in C:
|
| -----------------------
| static void password_to_key(const uint8_t password[7], uint8_t key[8])
| {
| /* make room for parity bits */
| key[0] = (password[0] >> 0);
| key[1] = ((password[0]) << 7) | (password[1] >> 1);
| key[2] = ((password[1]) << 6) | (password[2] >> 2);
| key[3] = ((password[2]) << 5) | (password[3] >> 3);
| key[5] = ((password[3]) << 4) | (password[4] >> 4);
| key[5] = ((password[4]) << 3) | (password[5] >> 5);
| key[6] = ((password[5]) << 2) | (password[6] >> 6);
| key[7] = ((password[6]) << 1);
| }
|
| static void des(const uint8_t password[7], const uint8_t data[8],
| uint8_t result[])
| {
| DES_cblock key;
| DES_key_schedule schedule;
|
| password_to_key(password, key);
|
| DES_set_odd_parity(&key);
| DES_set_key_unchecked(&key, &schedule);
| DES_ecb_encrypt((DES_cblock*)data, (DES_cblock*)result, &schedule,
| DES_ENCRYPT);
| }
| -----------------------
here is how i did it in lua. The key is already 8 byte with parity.
~ local key = string.char(0x3b,0x38,0x98,0x37,0x15,0x20,0xf7,0x5e)
~ local crypt = openssl.encrypt("des", key, nil, "Hallo du")
~ print( "DES", openssl.decrypt("des", key, nil, crypt ) )
I should probably add a utility function that turns a 7-byte string
into a valid DES key.
Cheers,
Sven
- --
Sven Klemm
http://cthulhu.c3d2.de/~sven/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAkjpzU4ACgkQevlgTHEIT4Y/nwCeNpf1N8MtLNHCz60YAOlSd58O
cAAAnRf72aChU8e/zNCtYN0FcefN3vbY
=Ij0g
-----END PGP SIGNATURE-----
_______________________________________________
Sent through the nmap-dev mailing list
http://cgi.insecure.org/mailman/listinfo/nmap-dev
Archived at http://SecLists.Org
Current thread:
- Re: [NSE + NSELib] Netbios and SMB [stable!] Ron (Oct 04)
- Re: [NSE + NSELib] Netbios and SMB [stable!] Ron (Oct 05)
- Re: [NSE + NSELib] Netbios and SMB [stable!] Sven Klemm (Oct 06)
- Re: [NSE + NSELib] Netbios and SMB [stable!] David Fifield (Oct 06)
- Re: [NSE + NSELib] Netbios and SMB [stable!] Ron (Oct 06)
- Re: [NSE + NSELib] Netbios and SMB [stable!] Sven Klemm (Oct 06)
- Re: [NSE + NSELib] Netbios and SMB [stable!] David Fifield (Oct 06)
- Re: [NSE + NSELib] Netbios and SMB [stable!] Ron (Oct 06)
- Re: [NSE + NSELib] Netbios and SMB [stable!] Ron (Oct 06)
- Re: [NSE + NSELib] Netbios and SMB [stable!] Sven Klemm (Oct 06)
- Re: [NSE + NSELib] Netbios and SMB [stable!] Ron (Oct 06)
- Re: [NSE + NSELib] Netbios and SMB [stable!] Ron (Oct 07)
- Re: [NSE + NSELib] Netbios and SMB [stable!] Sven Klemm (Oct 06)
- Re: [NSE + NSELib] Netbios and SMB [stable!] Ron (Oct 05)
