ENCRYPT

Section: Linux Programmer's Manual (3)
Updated: 2003-04-04
Index JM Home Page roff page
 

名前

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;
    int      initialized;
};

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

返り値

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

エラー

上記の関数を呼び出す前に errno を 0 に設定すること。 成功した場合、この値は変更されない。
ENOSYS
(例えば以前のアメリカ合衆国輸出規制などにより) この関数が提供されていない。
 

準拠

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

注意

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

この例を glibc 2.2 でコンパイルするには 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), feature_test_macros(7)


 

Index

名前
書式
説明
返り値
エラー
準拠
注意
関連項目

This document was created by man2html, using the manual pages.
Time: 04:31:37 GMT, November 19, 2007