|
今天在windows mobile 6下写了以下代码
HCRYPTPROV hProv; //CSP句柄
HCRYPTHASH hHash; //散列的句柄
const int BUFFER = 4096; //缓冲区的大小
BYTE pBuffer[BUFFER] = "hello world"; //存储读文件内容的缓冲区
BYTE pSignature[256]; //存放签名的缓冲区
ZeroMemory(&pSignature,256);
DWORD dSignatureLen = 256; //签名的长度
const int dReadLen = 256;
// TFileStream * sourceFile ;
if (!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0))
{
goto done;
}
if (!CryptCreateHash(hProv,CALG_MD5,0,0,&hHash))
{
goto done;
}
//do
{
if (!CryptHashData(hHash,pBuffer,dReadLen,0))
{
goto done;
}
} //while();
BOOL ret = CryptSignHash(hHash,AT_SIGNATURE,NULL,0,pSignature,&dSignatureLen);
//if (!CryptSignHash(hHash,AT_SIGNATURE,NULL,0,pSignature,&dSignatureLen))
//{
// goto done;
//}
DWORD oo = GetLastError();
done:
if (hHash !=0)
{
CryptDestroyHash(hHash);
}
if (hProv!=0)
{
CryptReleaseContext(hProv,0);
}
在执行到CryptSignHash 函数,执行失败,返回值得为:NTE_NO_KEY,查看了一下msdn,The private key specified by dwKeySpec does not exist私钥不存在).
请问 CryptoAPI 库中有没有自己 选择一个签名的密钥来进行签名的,因为我发现大部分的Demo都是自动产生一些签名的公钥/私钥对,而不能导入一个任意的私钥来进行签名 |
|