Man page - setkey(3)

Packages contains this manual

Available languages:

en fr pl tr ja ro

Manual

ENCRYPT

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

名 前

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) を 参 照 。

Image grohtml-26114-1.png

準 拠

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/ に 書 か れ て い る 。