encrypt(3) - wariua/manpages-ko GitHub Wiki
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
์ญ์๋ ์ํธํํ๋ ์ค์ ๊ฐ์ ๋นํธ ๋ฒกํฐ ํํ์ด๋ค. ๊ฐ์ ๋ฒกํฐ๋ก ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋๋ค.
์ด ๋ ํจ์๋ ์ฌ์ง์
๊ฐ๋ฅํ์ง ์๋ค. ์ฆ ํค ๋ฐ์ดํฐ๋ฅผ ์ ์ ์ ์ฅ ๊ณต๊ฐ์ ๋๋ค. 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
- ํจ์๊ฐ ์ ๊ณต๋์ง ์๋๋ค. (์๋ฅผ ๋ค์ด ๊ณผ๊ฑฐ์ ๋ฏธ๊ตญ ์์ถ ๊ท์ ๋๋ฌธ์.)
๋ ์ด์ ์์ ํ์ง ์๋ค๊ณ ๋ณด๋ DES ๋ธ๋ก ์ํธ๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ crypt()
, crypt_r()
, setkey()
, setkey_r()
์ด glibc 2.28์์ ์ ๊ฑฐ๋์๋ค. ์์ฉ๋ค์ libgcrypt
๊ฐ์ ํ๋์ ์ธ ์ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ํํ๋ ๊ฒ ์ข๋ค.
์ด ์ ์์ ์ฌ์ฉํ๋ ์ฉ์ด๋ค์ ๋ํ ์ค๋ช ์ attributes(7)๋ฅผ ๋ณด๋ผ.
์ธํฐํ์ด์ค | ์์ฑ | ๊ฐ |
---|---|---|
encrypt() , setkey()
|
์ค๋ ๋ ์์ ์ฑ | MT-Unsafe race:crypt |
encrypt_r() , setkey_r()
|
์ค๋ ๋ ์์ ์ฑ | MT-Safe |
encrypt()
, setkey()
: POSIX.1-2001, POSIX.1-2008, SUS, SVr4.
ํจ์ encrypt_r()
๊ณผ setkey_r()
์ GNU ํ์ฅ์ด๋ค.
crypt(3) ์ฐธ๊ณ .
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];
int i, j;
for (i = 0; i < 64; i++) {
key[i] = rand() & 1;
}
for (i = 0; i < 8; i++) {
for (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 (i = 0; i < 8; i++) {
for (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 (i = 0; i < 8; i++) {
for (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)
2018-04-30