encrypt(3)

الاسم
encrypt, setkey, encrypt_r, setkey_r - تعمية رسائل بطول 64 بت

المكتبة
مكتبة تجزئة كلمة السر (libcrypt، -lcrypt)

موجز
#define _XOPEN_SOURCE       /* انظر feature_test_macros(7) */
#include <unistd.h>

[[deprecated]] void encrypt(char block[64], int edflag);

#define _XOPEN_SOURCE       /* See feature_test_macros(7) */
#include <stdlib.h>

[[deprecated]] void setkey(const char *key);

#define _GNU_SOURCE         /* See feature_test_macros(7) */
#include <crypt.h>

[[deprecated]] void setkey_r(const char *key, struct crypt_data *data);
[[deprecated]] void encrypt_r(char *block, int edflag,
                              struct crypt_data *data);

الوصف
تعمي هذه الدوال وترجع رسائل بطول 64 بت. تضبط الدالة setkey() المفتاح المستخدم بواسطة encrypt(). معامل key المستخدم هنا هو مصفوفة من 64 بايت، لكل منها قيمة عددية 1 أو 0. تُتجاهل البايتات key[n] حيث n=8*i-1، لذا يكون طول المفتاح الفعلي 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 current_saltbits;
        int  direction;
        int  initialized;
    };

قبل استدعاء setkey_r() اضبط data->initialized على صفر.

قيمة الإرجاع
لا تُرجع هذه الدوال أي قيمة.

الأخطاء
اضبط errno على صفر قبل استدعاء الدوال أعلاه. عند النجاح، يبقى errno دون تغيير.

ENOSYS
    الدالة غير متوفرة. (مثلاً بسبب قيود التصدير الأمريكية السابقة.)

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
encrypt(), setkey() | سلامة الخيوط | غير آمن للمسارات المتعددة (MT-Unsafe) سباق:crypt
encrypt_r(), setkey_r() | سلامة الخيوط | MT-Safe

المعايير

encrypt()
setkey()
    POSIX.1-2008.

encrypt_r()
setkey_r()
    لا شيء.

التاريخ
أُزيلت في glibc 2.28.

لأنها تستخدم المُعمِّي الكتلي DES، الذي لم يعد يُعتبر آمنًا، أُزيلت هذه الدوال من glibc. يجب على التطبيقات التحول إلى مكتبة تشفير حديثة، مثل libgcrypt.

encrypt()
setkey()
    POSIX.1-2001، SUS، SVr4.

  التوفر في glibc
انظر crypt(3).

  الميزات في glibc
في glibc 2.2، تستخدم هذه الدوال خوارزمية DES.

أمثلة
    #define _XOPEN_SOURCE
    #include <crypt.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>

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

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

        for (size_t i = 0; i < 8; i++) {
            for (size_t 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 (size_t i = 0; i < 8; i++) {
            for (size_t 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 (size_t i = 0; i < 8; i++) {
            for (size_t 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)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.