【问题标题】:Win32 Encryption with the same size大小相同的Win32加密
【发布时间】:2013-04-24 03:54:41
【问题描述】:

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

我做了什么

  1. 制作证书:ma​​kecert.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 字节。我想强制它与纯文本大小相同。

【问题讨论】:

  • 代码看起来有点奇怪,但我是从我正在研究的课程中提取的。所以忘记结构和错误检查:)

标签: c++ winapi encryption public-key-encryption


【解决方案1】:

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

【讨论】:

  • 我正在就地加密,我迫不及待地想要累积 128 字节的值。我每个只有 15 个字节。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-21
    • 2012-06-26
    • 2014-05-14
    • 2011-05-21
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多