我通过对称密钥来加密解密文件,使用CryptAPI来产生密钥。大致过程如下:1. ::CryptGenKey(this->m_hCryptProvider, ENCRYPT_ALGORITHM, CRYPT_EXPORTABLE, &hKey);//产生加密密钥
2. ::CryptGetUserKey(this->m_hCryptProvider, AT_KEYEXCHANGE, &hXchgKey);//产生一个public key,用来加密需要传递的密钥hKey
      ::CryptExportKey(hKey, hXchgKey, SIMPLEBLOB, 0, NULL, &dwKeyBlobLen);
      ::CryptExportKey(hKey, hXchgKey, SIMPLEBLOB, 0, pbKeyBlob, &dwKeyBlobLen);//导出hKey
3.将密钥写入文件保存
导入密钥过程:
      ::CryptImportKey(this->m_hCryptProvider, pbKeyBlob, dwKeyBlobLen, 0, 0, &hKey);我是仿造MSDN的例子写的程序,有两个问题:
1. 以上程序在同一机子上运行时正常。但我在win7下导出密钥并保存到一个文件后,在转换到xp系统下导入时,就会产生NTE_NO_KEY错误。或者在相同系统的另一台机子上也无法导入密钥。
2. 在导出密钥时使用了hXchgKey对密钥hKey进行了加密,按理说应在在导入时应该用hXchgKey参数进行解密,但在程序中 ::CryptImportKey(this->m_hCryptProvider, pbKeyBlob, dwKeyBlobLen, 0, 0, &hKey);参数为0为何也能运行正常?这个例子看的我很费解啊!!
搞了好几天都没解决这个问题,希望高手来帮帮忙,贡献我所有的分!