c の crypt 関数を使用して、指定された文字列を暗号化しました。私は次のコードを書きました、
#include<stdio.h>
#include<unistd.h>
int main()
{
printf("%s\n",crypt("passwd",1000));
}
しかし、上記のコードは、「'crypt' への未定義の参照」というエラーをスローしました。上記のコードの問題は何ですか。
前もって感謝します。
c の crypt 関数を使用して、指定された文字列を暗号化しました。私は次のコードを書きました、
#include<stdio.h>
#include<unistd.h>
int main()
{
printf("%s\n",crypt("passwd",1000));
}
しかし、上記のコードは、「'crypt' への未定義の参照」というエラーをスローしました。上記のコードの問題は何ですか。
前もって感謝します。
関数を使用する場合はcrypt()、それを提供するライブラリにリンクする必要があります。-lcryptコンパイル コマンドに追加します。
古いバージョンの glibc はlibcrypt、この目的のためにライブラリを提供し<unistd.h>、このサポートに対してコンパイルするために -_XOPEN_SOURCEで関数を宣言しまし_GNU_SOURCEた<unistd.h>。
新しいバージョンの glibc は提供していません。libcrypt代わりに、別のlibxcrypt. とリンクします-lcryptが、関数は代わりに で宣言され<crypt.h>ます。
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
ヘッダーファイルの#define __XOPEN_SOURCE前に行う必要があります。#include
を使用する場合は、crypt.h を含める必要がありますcrypt()。他の 2 つのインクルードの下に、以下を追加します。
#include <crypt.h>
インクルードの前に次の行を追加する必要があります。
#define _XOPEN_SOURCE
このcrypt関数は非標準ですが、Linux の GNU C ライブラリによって拡張機能として提供されています。で定義されています<crypt.h>