0

ここにいくつかのコードがあります。

#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;
}

基本的に、npassmd5crypt結果です(パスワードはadminです)。これを確認するために、結果から塩を分離する必要があります。

私の理解では、の文字​​列Cは実際にはchar arrayすべての文字だけを含んでいます('\0'最後にあります)。ループを使用しforて最初の3文字を切り取りますが、のせいでASLR、得られる結果は常にランダムなものになると思います。実際、がない ASLRと、常に同じランダムな結果が得られます。

4

2 に答える 2

4

もちろん、「ランダムな」データを取得し、ソルトではなくハッシュに割り当てます。あなたは逆にしたい:

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

または、ループをスキップして次のようにすることもできます。

memcpy(salt, npass + 3, sizeof(salt) - 1);
salt[sizeof(salt) - 1] = '\0';
于 2013-02-07T08:34:16.970 に答える
0

すべてのバグがすでに指摘されており、いくつかの美的修正が行われているため、最終的には次のようになります。

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

#define SALT_N 12

int main()
{
    const char npass[] = "$1$bUZXMjKz$08Ps4NPTfj6ZNkoqrsP/D.";
    char salt [SALT_N+1];

    memcpy(salt, npass, SALT_N);
    salt[SALT_N] = '\0';
    puts(salt);
    return 0;
}
于 2013-02-07T08:47:24.490 に答える