-
-
[求助]CryptoAPI RSA方面的问题
-
发表于:
2010-8-3 15:33
6255
-
最近用c++做一个小程序,(本人属于密码学知识匮乏的人),我从服务器获得一段Key,应该算是公钥的modulus吧,长度是256个字节,十六进制格式的,"123456780ABCDEF....(256个)",相当于128个Bytes,1024Bits的模。另外还从服务器获得了Exponent,是0x010010,我使用了OpenSSL,成功的加密了,主要代码如下:
bool CUtils::RSA_Encrypt(const char* modulus, int publicExponent, const char* pszClearText, char* pszRet)
//modulus是256长度的字符串,publicExponent是0x010010,pszClearText是一段欲加密的文本,pszRet是输出结果
{
BIGNUM *bnn, *bne;
bnn = BN_new();
bne = BN_new();
BN_hex2bn(&bnn, modulus);
BN_set_word(bne, publicExponent);
RSA *rsa = RSA_new();
rsa->n = bnn;
rsa->e = bne;
int len = RSA_size(rsa);
unsigned char* pszCipherText = new unsigned char[len];
int nRet = RSA_public_encrypt(len-11, (const unsigned char*)pszClearText, pszCipherText, rsa, RSA_PKCS1_PADDING);
for (int i=0; i<nRet; i++)
sprintf(pszRet, "%s%02X", pszRet, pszCipherText[i]);
delete []pszCipherText;
BN_clear_free(bnn);
BN_clear_free(bne);
return nRet>0;
}
上述代码可否用CryptoAPI来替换?
我先使用CryptAcquireContext()创建CSP,然后用CryptImportKey()导入publickey,可函数返回失败,这个publickey我是把上面256字节的字符转成128字符后再传进去的。不过还是错,可能是我的key不完整吧,但我只有这些信息(key的结构除了模还有其他什么东西?),我该怎样用CryptoAPI来实现上面OpenSSL的加密功能呢。
[课程]FART 脱壳王!加量不加价!FART作者讲授!