我正在尝试研究NTLMv2响应,Eric Glass's work。
但停留在HMAC-MD5部分。 (使用this之类的功能)
我有正确的NTLM哈希,以及Unicode用户名和域。
(他只强调“ USERDOMAIN”,没有用户名,所以我想是“ USER”)
unsigned char v1hash[16]; // "0xcd06ca7c7e10c99b1d33b7485a2ed808"
unsigned short udata[14];
// concated unicode USER+USERDOMAIN "0x550053004500520044004f004d00410049004e00"
unsigned char v2hash[16];
int iLen;
HMAC(EVP_md5(), v1hash, 16, udata, sizeof(udata), v2hash, &iLen);
但结果是:
v2hash(16): 23 d2 3c a4 dd 1a 20 81 35 cf 3a 42 1c e1 5a 17
应该是“ 0x04b8e0ba74289cc540826bab1dee63ae”
我在这里做错什么了吗?
最佳答案
我不是C程序员,但是...
从我对那篇文章的阅读中,USERDOMAIN应该就是这样-NOT USER + USERDOMAIN,即大写的用户名=“ USER”与目标=“ DOMAIN”相结合,以提供USERDOMAIN,从而给出以55005300开头的unicode字节...
然后,您的udata数组将显示为错误的大小。您仅处理20字节的信息,因此请勿将数组设置为28,否则HMAC / MD5函数将在输入数组的末尾处理额外的随机数据。
关于c - 使用openSSL的HMAC-MD5,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15947057/