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 キーレンは 1024 ビット (128 バイト) のように見えるため、入力と出力のサイズは常に 128 バイトであり、RSA キーレンのサイズと同じです...

于 2013-04-30T09:53:28.593 に答える
1

あまりにも複雑です。入力文字列を 15 バイトのキーで XOR します。これはワンタイム パッドとして知られており、100% 安全であることが証明されています。(a XOR b) XOR b = aすべての a と b に対して、かつ(a XOR b) XOR c = ab=c の場合に限り、復号化は暗号化と同じです。

于 2013-05-02T13:48:28.023 に答える