在C中为字符串剪切字符

标签 c string cut

这是一些代码。

#include <stdio.h>

int main()
{
    char npass[] = "$1$bUZXMjKz$08Ps4NPTfj6ZNkoqrsP/D.";
    char salt [12];
    int i;
    for (i = 0; i < 12; i++)
    {
            npass[i+3] = salt[i];
            i++;
    }
    salt[12] = '\0';
    puts(salt);
    return 0;
}

基本上,npass 是一个 md5crypt 结果(密码是 admin)。为了验证这一点,我需要将盐从结果中分离出来。

我的理解是 C 中的字符串实际上是一个 char 数组,仅包含所有字母('\0' 在结尾)。我使用 for 循环来剪切前三个字符,但我猜是因为 ASLR,我得到的结果总是随机的。实际上,没有 ASLR,我总是得到相同的随机结果。

最佳答案

当然你会得到“随机”数据,你将分配给哈希而不是盐。你想要相反的方式:

salt[i] = npass[i+3];

或者您可以跳过循环并执行:

memcpy(salt, npass + 3, sizeof(salt) - 1);
salt[sizeof(salt) - 1] = '\0';

关于在C中为字符串剪切字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14746755/

相关文章:

c++ - boost:algorithm::join() 可以连接一个 float 容器吗?

c# - CamelCase 转换为友好名称,即枚举常量;问题?

bash - 使用 bash ps 和 cut 一起

c - 我不明白为什么它不显示文件中的 float (二进制文件)

c++ - 给定种子和偏移量生成下一个伪随机值

Python - 从文件中的行中删除时间戳和用户名

Unix - sed 从第一个冒号后的行中获取值

unix - 如何一次性使用剪切和粘贴

c++ - Windows 中优于 100ns 的分辨率计时器

c - 带有省略号的函数定义