首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用CryptoAPI生成ascii密文

用CryptoAPI生成ascii密文
EN

Stack Overflow用户
提问于 2010-01-22 23:15:56
回答 1查看 921关注 0票数 0

具体地说,我要做的是为远程协助票证生成一个PassStub字段。问题是,我的结果看起来像二进制数据,但不知何故,Microsoft生成了可打印的字符。

在MS-RAI:远程协助初始化协议规范<16>第6部分:微软表示,"PassStub“字段”是使用PROV_RSA_FULL预定义的加密提供程序与MD5散列和CALG_RC4 ( RC4流加密算法)进行加密的。“

这里有一个数据流程图:http://msdn.microsoft.com/en-us/library/cc240189(PROT.10).aspx#id16

该图显示了使用"RA SessionID“加密的散列密码,如下所示:

当我调用CryptEncrypt时,结果是关于SessionID长度的二进制数据。微软不知何故得到了类似这样的东西:"Po^1BiNrHBvHGP“

下面是我尝试用来做这件事的代码:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2010-01-23 03:18:38

"RA SessionID“看起来像是base64-encoded。我的猜测是pass-stub也是base64编码的--除非你的例子:"Po^1BiNrHBvHGP“太短了,并且包含一个^。这是一个真实的例子吗?

您可能还需要对RA会话ID进行base64解码,然后再将其提供给CryptEncrypt。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2118180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档