gpt4 book ai didi

security - "User-friendly"但匿名日志文件的安全算法

转载 作者:行者123 更新时间:2023-12-04 00:45:15 26 4
gpt4 key购买 nike

我有一组 IIS 日志文件,我想将其发布用于研究。

但是,这些包含一些我想匿名的敏感信息,例如:

UserName=XXXX65

我想使用一种算法来保留一些“用户友好”的日志文件视觉检查,但它也足够安全,不可能/不切实际地导出原始用户名。

我不能只** 找出所有的用户名,因为能够关联来自同一用户名的日志请求非常重要。

使用 SHA1 哈希给了我类似的东西

UserName=AD5CBF0BA0A8646EBDBA6BE1B5DA4FCB1F385D39

刚好可用,

SHA256 给出:

UserName=C9B84EE0DD2EFA53645D5268602E23A9E788903B31BBEB99C03982D9B50AF70C

它开始变得太长而无法使用,

PBKDF2-SHA1 hashing

UserName=1000:153JkeeGAqtG2UsHX57RBqm3O0DIkXhF:31BBDlQrUqqeyaMo/ikCJAXRC4fFXf82

在我看来太长了,不可用。

是否有一种算法可以提供相对较短的单向哈希但保持安全/不可逆?

我正在寻找可以用眼睛扫描日志文件并仍然注意到用户名相关性的东西。

最佳答案

哈希并不是真正匿名的一种方式。为什么?可以很容易地验证哪个用户对应于哪个哈希:

  1. 假设 “root” 是一个用户。
  2. 您应用了 hash("root"),结果是 foo。您发布的日志包含多个对 foo 的引用。
  3. 我聪明地猜测 root 是您机器上的一个用户。然后我自己应用 hash("root") 并获得 foo。现在我知道哪些日志对应于 “root”

所以本质上:当您稍后希望能够从发布的日志中验证某个用户是某个日志的原因时,哈希很有用。不是当目标是匿名时。

此外,散列很难阅读。

我会生成随机可发音的字符串,并将一个字符串映射到每个用户名。然后使用随机字符串发布日志。真正匿名且真正可读。

如何生成随机可发音的字符串? 交替辅音和元音。这是使用 C 的方法(当然,这只会产生一个随机的 6 个字符的字符串。在处理日志时,您需要更多的逻辑来处理它,例如:将每个用户名映射到一个字符串,确保字符串是独一无二的):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

#define NAME_LENGTH 6

#define RAND_CHAR(string) \
( (string)[rand () % strlen (string)])

int main (void)
{
char vowel[] = "aeiou";
char consonant[] = "bcdfghjklmnpqrstvwxyz";
int i;

char rand_name[NAME_LENGTH + 1];

srand (time (NULL));

for (i = 0; i < NAME_LENGTH; i++)
rand_name[i] = (i % 2) ? RAND_CHAR (vowel) : RAND_CHAR (consonant);

rand_name[NAME_LENGTH] = '\0';

printf ("%s\n", rand_name);

return 0;
}

这是它为我生成的一些示例:

西马拉
戈吉帕
托佩奇
解离
法索塔
rironu

如果你服务的用户数量相当于125 * 213,你需要生成更长的字符串,并且可能使用分隔符以便于发音:

cemala-gogipa

关于security - "User-friendly"但匿名日志文件的安全算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11635458/

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