Encryption 如何使用memfrob()加密整个文件? #包括 void memfrob(void*s,大小n) { char*p=(char*)s; 而(n-->0) *p++^=42; } int main() { memfrob(“C:\\ProgramFiles\\***\***\***\***\***\***\***\****”,30344); }

Encryption 如何使用memfrob()加密整个文件? #包括 void memfrob(void*s,大小n) { char*p=(char*)s; 而(n-->0) *p++^=42; } int main() { memfrob(“C:\\ProgramFiles\\***\***\***\***\***\***\***\****”,30344); },encryption,Encryption,这是我的密码。如果你不知道,我不知道我在做什么。我在谷歌上搜索了大约一个小时,还没有看到如何使用memfrob()的示例,这可能就是我如此迷茫的原因。我试图传递文件名,然后以字节为单位传递文件大小,但我的程序崩溃了 好的,这就是我现在所拥有的: #include <Windows.h> void memfrob(void * s, size_t n) { char *p = (char *) s; while (n-- > 0) *p++ ^= 42; } int

这是我的密码。如果你不知道,我不知道我在做什么。我在谷歌上搜索了大约一个小时,还没有看到如何使用memfrob()的示例,这可能就是我如此迷茫的原因。我试图传递文件名,然后以字节为单位传递文件大小,但我的程序崩溃了

好的,这就是我现在所拥有的:

#include <Windows.h>

void memfrob(void * s, size_t n)
{
 char *p = (char *) s;

 while (n-- > 0)
  *p++ ^= 42;
}

int main()
{
 memfrob("C:\\Program Files\\***\***\\***\***\\***", 30344);
}
#包括
#包括
整数计数=0;
文件*pFile=0;
长尺寸=0;
void*memfrob(void*s,尺寸n)
{
char*p=(char*)s;
而(n-->0)
*p++^=42;
返回s;
}
int main()
{
fopen_s(&pFile,“C:\\Program Files\\CCP\\EVE\\lib\\corelib\\nasty.pyj”,“r+”);
fseek(pFile,0,SEEK_END);
大小=ftell(pFile);
char*buffer=(char*)malloc(大小);
memset(缓冲区,0,大小);
fread(缓冲区,大小,1,pFile);
fclose(pFile);
memfrob(缓冲区、大小);
fopen_s(&pFile,“C:\\Program Files\\CCP\\EVE\\lib\\corelib\\nasty.pyj”,“w+”);
fwrite(缓冲区,大小,1,pFile);
fclose(pFile);
}

在我的调试器中,fread似乎没有向缓冲区写入任何内容,并且我的结束文件只是一次又一次的2A,它是00 xor'd和42。那么我能得到另一个提示吗?

好吧,这里有几件事不对。 小问题是,您传递的是文件的位置,而不是文件本身。阅读如何在C中进行文件I/O


真正的问题是你似乎认为这是加密。这并不会真正加密您的文件,除了最琐碎的安全问题(例如有人随机打开您的文件)

嗯,这里有几件事不对。 小问题是,您传递的是文件的位置,而不是文件本身。阅读如何在C中进行文件I/O


真正的问题是你似乎认为这是加密。这并不会真正加密您的文件,除了最琐碎的安全问题(例如有人随机打开您的文件)

您需要传递
memfrob
一段包含文件内容的内存,而不是文件名。它崩溃是因为您传入了一个只读内存缓冲区,然后试图修改它

检查
open
read
I/O功能,或者
fopen
fread
。您的主线应该类似于:

#include <Windows.h>
#include <stdio.h>

int count = 0;
FILE* pFile = 0;
long Size = 0;

void *memfrob(void * s, size_t n)
{
    char *p = (char *) s;

    while (n-- > 0)
        *p++ ^= 42;
    return s;
}

int main()
{
    fopen_s(&pFile, "C:\\Program Files\\CCP\\EVE\\lib\\corelib\\nasty.pyj", "r+");
    fseek(pFile, 0, SEEK_END);
    Size = ftell(pFile);
    char *buffer = (char*)malloc(Size);
    memset(buffer, 0, Size);
    fread(buffer, Size, 1, pFile);
    fclose(pFile);
    memfrob(buffer, Size);
    fopen_s(&pFile, "C:\\Program Files\\CCP\\EVE\\lib\\corelib\\nasty.pyj", "w+");
    fwrite(buffer, Size, 1, pFile);
    fclose(pFile);
}

您需要传递
memfrob
一段包含文件内容的内存,而不是文件名。它崩溃是因为您传入了一个只读内存缓冲区,然后试图修改它

检查
open
read
I/O功能,或者
fopen
fread
。您的主线应该类似于:

#include <Windows.h>
#include <stdio.h>

int count = 0;
FILE* pFile = 0;
long Size = 0;

void *memfrob(void * s, size_t n)
{
    char *p = (char *) s;

    while (n-- > 0)
        *p++ ^= 42;
    return s;
}

int main()
{
    fopen_s(&pFile, "C:\\Program Files\\CCP\\EVE\\lib\\corelib\\nasty.pyj", "r+");
    fseek(pFile, 0, SEEK_END);
    Size = ftell(pFile);
    char *buffer = (char*)malloc(Size);
    memset(buffer, 0, Size);
    fread(buffer, Size, 1, pFile);
    fclose(pFile);
    memfrob(buffer, Size);
    fopen_s(&pFile, "C:\\Program Files\\CCP\\EVE\\lib\\corelib\\nasty.pyj", "w+");
    fwrite(buffer, Size, 1, pFile);
    fclose(pFile);
}

它现在所做的是尝试“加密”传递给它的字符串的前30344个字符。这是行不通的。您需要使用文件访问功能将文件读入内存,然后再将其写回。啊,好的,我现在明白了,谢谢您的回复。您正在寻找到底,并进行ftell以获得文件大小。然后您需要再次fseek回到文件的开头:
fseek(pFile,0,SEEK\u SET)
它现在正在做的是尝试“加密”传递给它的字符串的前30344个字符。这是行不通的。您需要使用文件访问功能将文件读入内存,然后再将其写回。啊,好的,我现在明白了,谢谢您的回复。您正在寻找到底,并进行ftell以获得文件大小。然后你需要再次回到文件的开头:
fseek(pFile,0,SEEK\u SET)
如果它不是加密,那么它是什么?@Matti从技术上讲,它是加密的,但它太弱了,以至于人们会说它被伪装成了加密。是的,我试图加密的数据没有那么重要,很多人看不到。这就是为什么memfrob()对我来说没问题。如果它不是加密,那它是什么?@Matti从技术上讲,它是加密的,但它太弱了,以至于人们会认为它被伪装成了加密。是的,我试图加密的数据没有那么重要,很多人看不到它。这就是为什么memfrob()对我来说是可以的。好的,谢谢,我基本上遵循了这种格式,但现在fread没有写入缓冲区,所以我不确定我现在搞砸了什么。好的,谢谢,我基本上遵循了这种格式,但现在fread没有写入缓冲区,所以我不确定我现在搞砸了什么。