Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all bug

名前

       encrypt, setkey, encrypt_r, setkey_r - 64 ビットのメッセージを暗号化する

書式

       #define _XOPEN_SOURCE /* feature_test_macros(7) 参照 */
       #include <unistd.h>

       void encrypt(char block[64], int edflag);

       #define _XOPEN_SOURCE /* feature_test_macros(7) 参照 */
       #include <stdlib.h>

       void setkey(const char *key);

       #define _GNU_SOURCE /* feature_test_macros(7) 参照 */
       #include <crypt.h>

       void setkey_r(const char *key, struct crypt_data *data);
       void encrypt_r(char *block, int edflag, struct crypt_data *data);

       これらの関数は -lcrypt でリンクする必要がある。

説明

       これらの関数は、64 ビットのメッセージの暗号化と復号化を行う。 setkey()  関数は encrypt() によって使われる
       暗号鍵を設定する。 ここで使われる引き数 key は 64 バイトの配列であり、各バイトは数値 1 または 0  である。
       n=8*i-1 に対するバイト key[n] は無視されるので、 有効な暗号鍵の長さは 56 ビットになる。

       encrypt()  関数は、 edflag が 0 の場合は暗号化し、1 が渡された場合は復号化するというように、 渡されたバッ
       ファーを変更する。 引き数 key と同様に、  block  はエンコードされた実際の値を表現するビットの配列である。
       結果はこの同じ配列を使って返される。

       これら  2 つの関数はリエントラント (reentrant) ではない。 つまり暗号鍵データは静的な領域に保存される。 関
       数 setkey_r() と encrypt_r()  はリエントラントなバージョンである。 これらの関数は暗号鍵データを保持するた
       めに以下のような構造体を使う。

           struct crypt_data {
               char     keysched[16 * 8];
               char     sb0[32768];
               char     sb1[32768];
               char     sb2[32768];
               char     sb3[32768];
               char     crypt_3_buf[14];
               char     current_salt[2];
               long int current_saltbits;
               int      direction;
               int      initialized;
           };

       setkey_r()  を呼び出す前には、 data->initialized を 0 に設定すること。

返り値

       これらの関数は、なにも値を返さない。

エラー

       上記の関数を呼び出す前に errno を 0 に設定すること。 成功した場合、この値は変更されない。

       ENOSYS (例えば以前のアメリカ合衆国輸出規制などにより)  この関数が提供されていない。

属性

   マルチスレッディング (pthreads(7) 参照)
       関数 encrypt() と setkey() はスレッドセーフではない。

       関数 encrypt_r() と setkey_r() はスレッドセーフである。

準拠

       関数  encrypt()   と  setkey()   は  SVr4,  SUSv2,  and  POSIX.1-2001  に準拠する。  関数 encrypt_r()  と
       setkey_r()  は GNU 拡張である。

注意

       glibc 2.2 では、これらの関数は DES アルゴリズムを使う。

       この例を  glibc  でコンパイルするには  libcrypt  とリンクする必要がある。  実際に動作させるためには、配列
       key[]txt[] に有効なビットパターンを指定しなければならない。

       #define _XOPEN_SOURCE
       #include <unistd.h>
       #include <stdlib.h>

       int
       main(void)
       {
           char key[64];      /* bit pattern for key */
           char txt[64];      /* bit pattern for messages */

           setkey(key);
           encrypt(txt, 0);   /* encode */
           encrypt(txt, 1);   /* decode */
       }

関連項目

       cbc_crypt(3), crypt(3), ecb_crypt(3)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告
       に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。

                                                   2013-07-22                                         ENCRYPT(3)