kazmax - Linux で自宅サーバー

encrypt - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. エラー
  6. 注意
  7. 準拠
  8. 関連項目

名前

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

書式

#define _XOPEN_SOURCE
#include <unistd.h>
void encrypt(char block [64], int edflag );
#define _XOPEN_SOURCE
#include <stdlib.h>
void setkey(const char * key );
#define _GNU_SOURCE
#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, initialized;
};

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

返り値

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

エラー

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

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

この例を glibc2.2 でコンパイルするには libcrypt とリンクする必要がある。 実際に動作させるためには、配列 key[] と txt[] に 有効なビットパターンを指定しなければならない。 <crypt.h> ヘッダをインクルードすると、無条件に setkey () encrypt ()のプロトタイプが提供される点に注意すること。

#include <crypt.h>


main() { char key[64]; /* キーのビットパターン */ char txt[64]; /* メッセージのビットパターン */ setkey(key); encrypt(txt, 0); /* エンコード */ encrypt(txt, 1); /* デコード */ }

注意

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

準拠

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

関連項目

cbc_crypt (3),  crypt (3),  ecb_crypt (3), fcrypt (3),  feature_test_macros (7)