我想加密一个15字节的数组。问题是我希望密文具有相同的大小。
我做了什么
编写此代码以导入证书,然后加密纯文本。
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字节。我想强制它与纯文本的大小相同。
答案 0 :(得分:2)
RSA算法不能输出任意大小的密文。你必须忍受这个。由于你的RSA keylen似乎是1024位(128字节),输入和输出大小总是128字节,等于RSA keylen的大小......
答案 1 :(得分:1)
太复杂了。使用15字节密钥对输入字符串进行异或。这被称为One Time Pad,可证明是100%安全的。解密与加密相同,(a XOR b) XOR b = a
适用于所有a和b,(a XOR b) XOR c = a
当且仅当b = c。