首页
社区
课程
招聘
[求助]CryptoAPI RSA方面的问题
发表于: 2010-8-3 15:33 6255

[求助]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作者讲授!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 317
活跃值: (13)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
你要导入的密钥应该由CryptExportKey来导出,这样才能得到正确的密钥
而不是你自己写一些信息进去就行的
2010-8-3 16:08
0
游客
登录 | 注册 方可回帖
返回
//