【问题标题】:How sync C# RSACryptoServiceProvider with C++ cryptoapi如何将 C# RSACryptoServiceProvider 与 C++ cryptoapi 同步
【发布时间】:2022-10-04 18:22:49
【问题描述】:
  1. c++ 中的加密字节
  2. 将加密字节加载到 c# 应用程序并解密
  3. 我收到带有文本“参数不正确”的异常。

    如何解决这个问题?

    我的 C# 代码:

     public static byte[] RSA_Decrypt(byte[] inputData, byte[] privateKey)
            {
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048))
                {
                    rsa.ImportCspBlob(privateKey);
    
                   return rsa.Decrypt(inputData, false);
    

    我的 C++ 代码:

                                do
                                {
                                    bReturn = CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT);
    
                                    bReturn = CryptImportKey(hCryptProv,vecPublicKey.data(), vecPublicKey.size(), NULL, 0, &hCryptKey);
    
    
    
    
                                    std::vector<unsigned char> vecBlock(2048), vecResult;
    
                                    DWORD dwRead = 3;
    
                                        bReturn = CryptEncrypt(hCryptKey, NULL, TRUE, 0, (BYTE*)vecBlock.data(), &dwRead, vecBlock.size());
    
                                        vecResult.insert(vecResult.end(), vecBlock.begin(), vecBlock.begin() + dwRead);
    
                                } while (FALSE);
    

【问题讨论】:

    标签: c# c++ rsa cryptoapi


    【解决方案1】:

    你检查过你的 C++ 代码吗?只是看着它,我可以看到你没有正确使用“CryptEncrypt”。使用 2048 位的 RSA 密钥,您的加密输出将始终为 256 字节长。

    我不知道你为什么设置“DWORD dwRead = 3;”的值但是即使你只想加密 3 个字节,在 RSA 加密的情况下加密的输出也会有 256 个字节!

    在您的代码中,调用“CryptEncrypt”后“bReturn”的值很可能为假,这意味着它失败了。

    对“CryptAcquireContext”和“CryptImportKey”的调用也不应该在“while”循环内。他们只需要被调用一次......

    如果您需要加密大量数据,您可能需要使用另一种加密算法。尝试查看 AES。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多