0

我想加密一个 15 字节的数组。问题是我希望密文具有相同的大小。

我做了什么

  1. 制作证书:makecert.exe -n "CN=me" -sv PrivateKey.pvk -pe Certificate.cer
  2. 编写此代码以导入证书,然后加密纯文本。

    BYTE    FileContent[1024];
    DWORD   dwActualFileLen = 0;
    HANDLE  hCertFile;
    if(CryptAcquireContext(&m_hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0))
    {
    hCertFile = CreateFileA("C:\\projects\\Certificate.cer", 
         GENERIC_READ,
         FILE_SHARE_READ, 
         NULL, 
         OPEN_EXISTING,
         FILE_FLAG_SEQUENTIAL_SCAN,
         NULL);
    
    ReadFile(hCertFile, FileContent, 1024, &dwActualFileLen, NULL);
    
    m_CertContext = CertCreateCertificateContext(X509_ASN_ENCODING, FileContent, dwActualFileLen);
    
    CryptImportPublicKeyInfo(m_hCryptProv, X509_ASN_ENCODING, &m_CertContext->pCertInfo->SubjectPublicKeyInfo, &m_hPubKey);
    }
    
    CryptEncrypt(m_hPubKey, NULL, TRUE, 0, tempBuffer, &dwNewLen, 128);
    

密文始终为 128 字节。我想强制它与纯文本大小相同。

4

2 回答 2

2

RSA 算法不能输出任意大小的密文。你必须忍受这个。由于您的 RSA keylen 似乎是 1024 位(128 字节),因此输入和输出大小始终为 128 字节,等于 RSA keylen 的大小......

于 2013-04-30T09:53:28.593 回答
1

太复杂了。用 15 字节的密钥对输入字符串进行异或。这被称为 One Time Pad,并且被证明是 100% 安全的。(a XOR b) XOR b = a对于所有 a 和 b,并且(a XOR b) XOR c = a当且仅当 b=c 时,解密与加密相同。

于 2013-05-02T13:48:28.023 回答