ENCRYPT

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home Page
 

名前

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

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

返り値

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

エラー

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

バージョン

Because they employ the DES block cipher, which is no longer considered secure, crypt(), crypt_r(), setkey(), and setkey_r() were removed in glibc 2.28. Applications should switch to a modern cryptography library, such as libgcrypt.  

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース 属性 値
encrypt(), setkey() Thread safety MT-Unsafe race:crypt
encrypt_r(), setkey_r() Thread safety MT-Safe
 

準拠

encrypt(), setkey(): POSIX.1-2001, POSIX.1-2008, SUS, SVr4.

関数 encrypt_r() と setkey_r() は GNU による拡張である。  

注意

 

Availability in glibc

crypt(3) を参照。  

Features in glibc

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

例

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


 int main(void) {
    char key[64];
    char orig[9] = "eggplant";
    char buf[64];
    char txt[9];


    for (int i = 0; i < 64; i++) {
        key[i] = rand() & 1;
    }


    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            buf[i * 8 + j] = orig[i] >> j & 1;
        }
        setkey(key);
    }
    printf("Before encrypting: %s\n", orig);


    encrypt(buf, 0);
    for (int i = 0; i < 8; i++) {
        for (int j = 0, txt[i] = '\0'; j < 8; j++) {
            txt[i] |= buf[i * 8 + j] << j;
        }
        txt[8] = '\0';
    }
    printf("After encrypting:  %s\n", txt);


    encrypt(buf, 1);
    for (int i = 0; i < 8; i++) {
        for (int j = 0, txt[i] = '\0'; j < 8; j++) {
            txt[i] |= buf[i * 8 + j] << j;
        }
        txt[8] = '\0';
    }
    printf("After decrypting:  %s\n", txt);
    exit(EXIT_SUCCESS); }  

関連項目

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

この文書について

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

関連キーワード

crypt   encrypt   setkey   ビット   define   暗号   暗号化   feature   macros   struct   バイト   orig   printf   メッセージ   unistd   stdlib   復号   current   initialized   Thread   safety   encrypting   After   数値   バッファー

Linux マニュアル 一覧

関連するコマンド・関数

encrypt_r.3   setkey.3   setkey_r.3   DES_FAILED.3   cbc_crypt.3   des_crypt.3
 

Index

名前
書式
説明
返り値
エラー
バージョン
属性
準拠
注意
Availability in glibc
Features in glibc
例
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:34 GMT, October 11, 2026