MD4 and DES for unicode strings (samba passwd file manipulation)

Fredrik Lundh fredrik at pythonware.com
Wed Sep 4 03:14:12 EDT 2002


Arcady Genkin wrote:

> And yet I can't create the right crypted strings:
>
>   >>> from Crypto.Hash import MD4
>   >>>
>   >>> m = MD4.new()
>   >>> m.update( u'111222333' )
>   >>> m.hexdigest().upper()
>   'A672E5EDFDAD90A15228E0AEC2AA9161'
>   >>> # SAMBA-encoded password "111222333":
>   >>> samba
>   'B66B458E27BD714F99A05EE3C479FBF1'
>
> Perhaps the problem lies with Unicode encoding?  Samba's man page (see
> the link below) says that the string is obtained by taking MD4 hash on
> the password, represented as a string of 16-bit little-endian unicode
> characters.

if you want a string of 16-bit little-endian unicode characters,
make sure you have one:

    m = MD4.new()
    m.update(password.encode("utf-16-le"))
    m.hexdigest().upper()

(I don't have the MD4 library, so I cannot verify this.  But if
it works, it works for both 8-bit strings with ASCII text, and
Unicode strings)

</F>





More information about the Python-list mailing list