gpt4 book ai didi

c - 如何在C中加密和解密char[]?

转载 作者:行者123 更新时间:2023-11-30 16:55:56 24 4
gpt4 key购买 nike

我有一个简单的 C 程序,它更像是一个“Echo”服务器,为此我想使用加密,并满足以下要求,

  1. 从客户端发送纯文本到服务器后,客户端将使用“预定义密码”“加密此字符串”并准备好
  2. 服务器将接收纯文本,并使用预定义的加密该字符串密码并将其发回
  3. 客户端收到密文后,与自己这边的密文进行比较,如果匹配则没有错误,否则显示错误

尝试了很多选择,但这里有其他要求,但一直失败,

  1. 没有外部库依赖项
  2. 加密文本应该可打印并可保存到文件(十六进制也可以)
  3. 此代码运行非常频繁(如聊天服务器)。因此需要尽可能快,但又不太容易猜测。

我能否获得一些完成此代码的帮助,加密文本需要采用纯 ASCII(或十六进制)格式。

以下是我现有代码的示例,

在客户端

char *randomAllowchar = "abcdefghijklmnopqrstuvwxyz";
char plainStrToServer[30];

// generating 20 char random string
for (n = 0;n < 20;n++) {
key = rand() % 26;
plainStrToServer[n] = randomAllowchar[key];
}

... other code to send this plainStrToServer to server side

// Receiving response from server
char server_reply[200];
if( recv(sock , server_reply , 200 , 0) < 0){
...
}

// comparing if server response matched with sent string
if (strcmp(plainStrToServer,server_reply) != 0) {
// Error
}
<小时/>

在服务器端

char buffer[30];
int rc1;

while (1) {
rc1 = read(fd, buffer, sizeof(buffer));
// write back original received message back to client
write(fd , buf, strlen(buffer));
}

最佳答案

如果您可以完全放松“无外部依赖项”的要求,则应该使用 libsodium 。我在这里详细描述了如何执行此操作:Simply encrypt a string in C 。对于聊天程序,您可能需要选项 3(公钥加密)。

原因是:您无法合理地期望自己以安全的方式实现任何当前强大的加密算法。 Libsodium 是一个相对较小的依赖项,它可以安全地实现当前被认为快速且安全的算法的高级抽象。

您所做的任何缺乏实际加密算法的操作都只是混淆,即使对于低预算的攻击者来说也很容易读取。例如,移位(或凯撒)密码会泄露有关纯文本模式的信息。如果您的纯文本是语言,这尤其糟糕:只需发送几个(可能是 100 个)单词并“加密”,能够嗅探流量的攻击者就能够通过猜测正确的 key 来解密所有过去和 future 的通信。

关于c - 如何在C中加密和解密char[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40131661/

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