gpt4 book ai didi

C++ 加密内存中的变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:26 25 4
gpt4 key购买 nike

编辑:我已经考虑了更多,并决定只加密内存中的变量会更好更容易,当我想使用它时只需解密它。我试过使用以下代码:

DWORD blockSize = CRYPTPROTECTMEMORY_BLOCK_SIZE;
int* protectedBlock = (int*)LocalAlloc(LPTR, (SIZE_T)blockSize);

protectedBlock[0] = 1234;
printf("Before encryption: %d\n", protectedBlock[0]);
// OUTPUT: 1234

CryptProtectMemory(protectedBlock, blockSize, CRYPTPROTECTMEMORY_SAME_PROCESS);
printf("After encryption: %d\n", protectedBlock[0]);
// OUTPUT: The encrypted string

CryptUnprotectMemory(protectedBlock, blockSize, CRYPTPROTECTMEMORY_SAME_PROCESS);
printf("After decryption: %d\n", protectedBlock[0]);
//OUTPUT: 1234

SecureZeroMemory(protectedBlock, blockSize);
LocalFree(protectedBlock);

当我想加密一个整数时,它工作正常,但是当我尝试使用一个字符串 (LPCSTR) 时,该字符串仍然保留在内存中。这是我使用的代码:

DWORD blockSize = CRYPTPROTECTMEMORY_BLOCK_SIZE;
LPTSTR* protectedBlock = (LPTSTR*)LocalAlloc(LPTR, (SIZE_T)blockSize);

protectedBlock[0] = (LPTSTR)"Test String";
printf("Before encryption: %d\n", protectedBlock[0]);

CryptProtectMemory(protectedBlock, blockSize, CRYPTPROTECTMEMORY_SAME_PROCESS);
printf("After encryption: %d\n", protectedBlock[0]);
// OUTPUT: The encrypted string

CryptUnprotectMemory(protectedBlock, blockSize, CRYPTPROTECTMEMORY_SAME_PROCESS);
cout << "After decryption: " << (char*)protectedBlock[0] << endl;
//OUTPUT: Test String

SecureZeroMemory(protectedBlock, blockSize);
LocalFree(protectedBlock);

最佳答案

哪个“内存”。 CPU 寄存器、内存、高速缓存、交换磁盘等。你问的是一个复杂的问题,你可能会写一本书。

事实上,它可能只在汇编中可行(而且值得商榷),在汇编中您可以确定编译器不会进行您不知道的某种类型的优化。即使这样也不会总是停止 cpu 寄存器/缓存等。

您应该问自己的真正问题是您试图保护它免受谁或什么的影响。

这里的一些内容可以帮助您开始解决您必须解决的少量问题。

Safe Clearing of Private Data

我会首先考虑在内存中加密变量(这本身可能是一个很大的话题)。

Google 和一些阅读是您的 friend 。

关于C++ 加密内存中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55308366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com