6

c の crypt 関数を使用して、指定された文字列を暗号化しました。私は次のコードを書きました、

#include<stdio.h>
#include<unistd.h>

int main()
{
    printf("%s\n",crypt("passwd",1000));
}

しかし、上記のコードは、「'crypt' への未定義の参照」というエラーをスローしました。上記のコードの問題は何ですか。

前もって感謝します。

4

6 に答える 6

11

関数を使用する場合はcrypt()、それを提供するライブラリにリンクする必要があります。-lcryptコンパイル コマンドに追加します。

古いバージョンの glibc はlibcrypt、この目的のためにライブラリを提供し<unistd.h>、このサポートに対してコンパイルするために -_XOPEN_SOURCEで関数を宣言しまし_GNU_SOURCE<unistd.h>

新しいバージョンの glibc は提供していません。libcrypt代わりに、別のlibxcrypt. とリンクします-lcryptが、関数は代わりに で宣言され<crypt.h>ます。

于 2010-04-02T07:51:44.457 に答える
7

crypt() uses DES which is extremely insecure and probably older than you 12 years older than you.

I suggest you use a serious encryption algorithm, such as AES. Many libraries offer such encryption; OpenSSL (crypto.lib) is a good choice for example.

Not answering your actual question since a lot of people already did

于 2010-04-02T07:11:26.393 に答える
2

ヘッダーファイルの#define __XOPEN_SOURCE前に行う必要があります。#include

于 2015-07-14T13:57:52.997 に答える
1

を使用する場合は、crypt.h を含める必要がありますcrypt()。他の 2 つのインクルードの下に、以下を追加します。

#include <crypt.h>
于 2010-04-02T06:59:07.900 に答える
1

インクルードの前に次の行を追加する必要があります。

#define _XOPEN_SOURCE
于 2010-04-02T07:02:23.290 に答える
0

このcrypt関数は非標準ですが、Linux の GNU C ライブラリによって拡張機能として提供されています。で定義されています<crypt.h>

于 2010-04-02T06:59:12.380 に答える