Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all
名前
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.54 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。 2013-07-22 ENCRYPT(3)