2010-01-22 14 views
0

具體是什麼我想要做的是生成PassStub領域遠程協助票證。問題是我的結果看起來像二進制數據,但不知何故微軟生成可打印的字符。第6部分:微軟表示,「PassStub」字段使用PROV_RSA_FULL預定義的加密提供程序和MD5哈希以及CALG_RC4(RC4流加密算法)加密。 「使用的CryptoAPI生成ASCII密文

有一個數據流程圖這裏: http://msdn.microsoft.com/en-us/library/cc240189(PROT.10).aspx#id16

圖顯示了散列密碼與一「RA SessionID的」它看起來像這樣加密:u0RIQibSMntm0wAHQZ2mhatI63sjMjX15kh/vnciytOix8z6w + 36B01OiJoB5uYe

當我打電話CryptEncrypt結果是有關SessionID長度的二進制數據。微軟在某種程度上得到的東西看起來是這樣的:「寶^ 1BiNrHBvHGP」

這裏是我想要用它來做到這一點的代碼:

HCRYPTPROV hCryptProv; 
HCRYPTKEY hKey; 
HCRYPTHASH hHash; 
BOOL bret=0; 

passwordlen = SysStringByteLen(L"password"); 
    char RASessionID[] = "u0RIQibSMntm0wAHQZ2mhatI63sjMjX15kh/vnciytOix8z6w+36B01OiJoB5uYe"; 

//---------------------------------------------------------------- 
// Acquire a cryptographic provider context handle. 
if(!CryptAcquireContext(&hCryptProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, 0)) 
{ 
    return FALSE; 
} 
//---------------------------------------------------------------- 
// Create an empty hash object. 
if(!CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash)) 
{ 
    return FALSE; 
} 
if(!CryptHashData(hHash, (BYTE *)bpassword, passwordlen, 0)) 
{ 
    return FALSE; 
} 

//---------------------------------------------------------------- 
// Create a session key based on the hash of the password. 
if(!CryptDeriveKey(hCryptProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey)) 
{ 
    return FALSE; 
} 

DWORD rasessionidlen = strlen(rasessionid); 
char* proxystub = (char*)malloc(rasessionidlen*2); 
strcpy(proxystub, rasessionid); 
bret = CryptEncrypt(hKey, NULL, TRUE, 0, (BYTE*)proxystub, &rasessionidlen, rasessionidlen*2); 
return bret; 

回答

1

的「RA的SessionID」看起來是base64-encoded。我的猜測是pass-stub也是base64編碼 - 除了你的例子:「Po^1BiNrHBvHGP」太短並且包含^。這是一個真實的例子嗎?

您也可以將其送入CryptEncrypt之前需要爲Base64解碼的RA會話ID。

+0

它看起來base64編碼,但在考慮的鏈路的圖提到十六進制編碼又名基16編碼。 – 2010-01-23 02:00:29

+0

我只能在Vista/Server 2008/Windows 7圖中看到十六進制編碼。這使用AES而不是RC4,所以我不認爲這是他想要實現的。 – 2010-01-23 06:07:47

+0

是^是它的一部分,這就是爲什麼這很有趣。如果你創建一個遠程協助票據文件並且看它,你會看到我在說什麼。 – 2010-01-24 17:40:13

相關問題