«Ақпараттық технологиялар» факультеті



бет2/2
Дата17.07.2024
өлшемі56,44 Kb.
#203595
түріПротокол
1   2
Байланысты:
Крипто RC4

RC4 алгоритмінің C++ тіліндегі программасы:

#include


#include

class RC4 {


private:
std::vector S;
int i, j;

public:
RC4(const std::vector& key) : i(0), j(0) {


S.resize(256);
for (int i = 0; i < 256; ++i)
S[i] = i;

int j = 0;


for (int i = 0; i < 256; ++i) {
j = (j + S[i] + key[i % key.size()]) % 256;
std::swap(S[i], S[j]);
}
}

std::vector encrypt(const std::vector& input) {


std::vector output(input.size());
i = j = 0;

for (size_t x = 0; x < input.size(); ++x) {


i = (i + 1) % 256;
j = (j + S[i]) % 256;
std::swap(S[i], S[j]);
int t = (S[i] + S[j]) % 256;
output[x] = input[x] ^ S[t];
}

return output;


}
};

int main() {


std::string keyString, plaintext;
std::cout << "Введите ключ: ";
std::cin >> keyString;
std::vector key(keyString.begin(), keyString.end());

std::cout << "Введите открытый текст: ";


std::cin >> plaintext;
std::vector plaintextVec(plaintext.begin(), plaintext.end());

RC4 rc4(key);


std::vector ciphertext = rc4.encrypt(plaintextVec);
std::cout << "Открытый текст: " << plaintext << std::endl;
std::cout << "Шифротекст (hex): ";
for (auto c : ciphertext)
printf("%02X", c);
std::cout << std::endl;

RC4 rc4_decrypt(key);


std::vector decryptedText = rc4_decrypt.encrypt(ciphertext);

std::cout << "Расшифрованный текст: ";


for (auto c : decryptedText)
std::cout << c;
std::cout << std::endl;

return 0;


}

Толық түсіндіру:



  1. Кітапханаларды қосу:

#include
#include
Бұл жолдарға енгізу-шығару және векторлармен жұмыс істеу үшін қажетті C++ тақырып файлдары кіреді

  1. RC4 класының анықтамасы:

class RC4 {
private:
std::vector S;
int i, j;

public:
// Кілтті қабылдайтын сынып конструкторы


RC4(const std::vector& key) : i(0), j(0) {
// S массивін инициализациялау
S.resize(256);
for (int i = 0; i < 256; ++i)
S[i] = i;

// I және j индекстерін инициализациялау


int j = 0;
// Негізгі кілт кестесі алгоритмі
for (int i = 0; i < 256; ++i) {
j = (j + S[i] + key[i % key.size()]) % 256;
std::swap(S[i], S[j]);
}
}

// Шифрлау әдісі


std::vector encrypt(const std::vector& input) {
// Шығыс векторын инициализациялау
std::vector output(input.size());
i = j = 0;

// RC4 алгоритмі


for (size_t x = 0; x < input.size(); ++x) {
i = (i + 1) % 256;
j = (j + S[i]) % 256;
std::swap(S[i], S[j]);
int t = (S[i] + S[j]) % 256;
output[x] = input[x] ^ S[t];
}

return output;


}
};
Бұл блокта RC4 шифрын жүзеге асыратын `RC4` класының анықтамасы бар. Оның жеке деректер мүшелері бар: ауыстыру кестесін сақтауға арналған `s` векторы және осы кестені басқаруға арналған екі `i` және `j` индексі. `RC4 ' конструкторы RC4 негізгі кесте алгоритмін қолдана отырып, берілген кілтпен RC4 нысанын инициализациялайды. 'Encrypt' әдісі ашық мәтінді қабылдайды және RC4 алгоритмі арқылы Шифр мәтінін қайтарады.



  1. `Main ' функциясы:

int main() {
// Пайдаланушының кілтті және ашық мәтінді енгізуін сұрауы
std::string keyString, plaintext;
std::cout << "Введите ключ: ";
std::cin >> keyString;
std::vector key(keyString.begin(), keyString.end());

std::cout << "Введите открытый текст: ";


std::cin >> plaintext;
std::vector plaintextVec(plaintext.begin(), plaintext.end());

// Берілген кілтпен RC4 нысанын құру және ашық мәтінді шифрлау


RC4 rc4(key);
std::vector ciphertext = rc4.encrypt(plaintextVec);
// Ашық мәтін мен Шифр мәтінін шығару
std::cout << "Открытый текст: " << plaintext << std::endl;
std::cout << "Шифротекст (hex): ";
for (auto c : ciphertext)
printf("%02X", c);
std::cout << std::endl;

// Сол кілтті пайдаланып Шифр мәтінін декодтау


RC4 rc4_decrypt(key);
std::vector decryptedText = rc4_decrypt.encrypt(ciphertext);

// Дешифрланған мәтінді шығару


std::cout << "Расшифрованный текст: ";
for (auto c : decryptedText)
std::cout << c;
std::cout << std::endl;

return 0;


}
Бұл блокта бағдарламаға кіру нүктесі болып табылатын main функциясы бар. Ол Пайдаланушыдан кілт пен ашық мәтінді енгізуді сұрайды, содан кейін сол кілтпен RC4 нысанын жасайды және ашық мәтінді шифрлайды. Содан кейін ол ашық мәтінді және тиісті шифр мәтінін он алтылық форматта шығарады. Осыдан кейін ол бірдей кілтпен жаңа RC4 нысанын жасайды және оны шифрлау нәтижесін экранға шығару арқылы алынған Шифр мәтінін декодтау үшін пайдаланады.


Достарыңызбен бөлісу:
1   2




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет