encrypt - 64 bitlik iletileri şifreler
setkey - encrypt() için anahtarı belirler
encrypt_r - 64 bitlik iletileri şifreler (evresel)
setkey_r - encrypt_r() için anahtarı belirler (evresel)
#include _XOPEN_SOURCE /* Bkz: feature_test_macros(7) */
#include <unistd.h>
- void encrypt
- (char block[64], int edflag);
#include _XOPEN_SOURCE /* Bkz: feature_test_macros(7) */
#include <stdlib.h>
- void setkey
- (const char *key);
#include _GNU_SOURCE /* Bkz: 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);
Bunların herbiri
-lcrypt ile ilintileme gerektirir.
- Uyarı:
- Artık güvenli kabul edilmeyen DES blok
şifresini kullandıkları için crypt(),
crypt_r(), setkey() ve setkey_r()
glibc-2.28’de kaldırıldı. Uygulamaların
libcrypt gibi daha güncel bir şifreleme
kütüphanesine geçmesi gerekir.
Bu işlevler 64 bitlik iletileri şifreler ve şifresini
çözer.
setkey() işlevi
encrypt()
işlevi tarafından kullanılan anahtarı belirler.
Burada kullanılan
key değişkeni 64 baytlık
bir dizidir ve her baytın değeri 1 ya da 0’dır.
key[n] dizisinin
n=8*i-1 indisli elemanları
yoksayılır, bu durumda asıl anahtar uzunluğu 56
bit olur.
encrypt() işlevi aktarılan tamponda
değişiklik yapar,
edflag değişkenine 0
aktarılırsa
block içeriğini
şifreler, 1 aktarılırsa şifresini
çözer.
key gibi
block değişkeni de
şifrelenmiş değerin bit gösterimini içerir.
Sonuç aynı tampon içinde döner.
Bu iki işlev evresel değildir, yani anahtar verisi statik bellek
bölgesinde saklanır.
setkey_r() ve
encrypt_r()
işlevleri evreseldir ve anahtar verisini saklamak için
crypt_data veri yapısını kullanı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() çağrısından önce
data->initialized alanına 0 atanır.
Bu işlevler herhangi bir değer döndürmez.
Yukarıdaki işlevler çağrılmadan önce
errno değişkeni sıfırlanır.
Başarı durumunda değeri değişmez.
- ENOSYS
- İşlev kütüphanede
bulunmamaktadır (Örneğin, ABD’nin ihracat
sınırlamalarından dolayı).
Bu bölümde kulllanılan terimlerin
açıklamaları
attributes(7) sayfasında
bulunabilir.
İşlev |
Öznitelik |
Değer |
encrypt, setkey
|
Evre Güvenliği |
ÇEG-hayır yarış:crypt |
encrypt_r, setkey_r
|
Evre Güvenliği |
ÇEG-evet |
encrypt(),
setkey(): POSIX.1-2001, POSIX.1-2008, SUS, SVr4.
encrypt_r() ve
setkey_r() işlevi GNU eklentisidir.
Glibc’deki yararlanım: Bkz.
crypt(3)
Glibc’deki özellikler: Gibc-2.2’de bu işlevler DES
algoritmasını kullanmaktadır.
#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("Şifrelenmeden önce: %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("Şifrelemeden sonra: %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("Şifre çözüldükten sonra: %s\n", txt);
exit(EXIT_SUCCESS);
}
cbc_crypt(3),
crypt(3),
ecb_crypt(3)
© 2004 Emin İslam Tatlı
© 2022 Nilgün Belma Bugüner
Bu çeviri özgür yazılımdır:
Yasaların izin verdiği ölçüde
HİÇBİR GARANTİ YOKTUR.
Lütfen, çeviri ile ilgili bildirimde bulunmak veya çeviri
yapmak için
https://github.com/TLBP/manpages-tr/issues adresinde
"New Issue" düğmesine tıklayıp yeni bir
konu açınız ve isteğinizi belirtiniz.