Дипломдық ЖҰмыс 5B100200 «Ақпараттық қауіпсіздік жүйелері»


Пайдаланылған әдебиеттер тізімі



бет13/14
Дата19.01.2022
өлшемі1,11 Mb.
#129475
түріДиплом
1   ...   6   7   8   9   10   11   12   13   14
Байланысты:
Дипломдық жұмыс Talgat

Пайдаланылған әдебиеттер тізімі



  1. Венбо Мао. Современная криптография: теория и практика. – Москва, 2005. – 768 с.

  2. Баричев С. Г., Гончаров В. В., Серов Р. Е. Основы современной криптографии – 3-е изд. – М.: Диалог-МИФИ, 2011. – 176 с.

  3. Қазақ тілі терминдерінің салалық ғылыми түсіндірме сөздігі: Информатика және компьютерлік техника / Жалпы редакциясын басқарған – түсіндірме сөздіктер топтамасын шығару жөніндегі ғылыми-баспа бағдарламасының ғылыми жетекшісі, педагогика ғылымдарының докторы, профессор, Қазақстан Республикасы Мемлекеттік сыйлығының лауреаты А. Қ. Құсайынов. – Алматы: «Мектеп» баспасы» ЖАҚ, 2002 жыл. – 456 бет.

  4. Норматов, Ш. Б. Роль больших простых чисел в современной криптографии / Ш. Б. Норматов. – Текст: непосредственный, электронный // Молодой ученый. – 2016. – № 9 (113). – С. 74-77.

  5. Теория чисел в криптографии : учеб. пособие / В. А. Орлов, Н. В. Медведев, Н. А. Шимко, А. Б. Домрачева. – М.: Изд-во МГТУ им. Н. Э. Баумана, 2011. – 233 с.

  6. URL: https://moluch.ru/archive/113/20400.

  7. Защита информации: учебное пособие / Ю.М. Краковский. – Ростов н/Д: Феникс, 2017. – 347 с.: ил. – (Высшее образование).

  8. Delfs, Hans & Knebl, Helmut. "Symmetric-key encryption". Introduction to cryptography: principles and applications, – 2007.

  9. Kaliski B. Asymmetric Cryptosystem. Encyclopedia of Cryptography and Security. – USA, 2011.

  10. Нильс Фергюсон, Брюс Шнайер. Практическая криптография = Practical Cryptography: Designing and Implementing Secure Cryptographic Systems. – М.: Диалектика, 2004. – 432 с.

  11. Джосаттис Николаи М. "The C++ Standard Library: A Tutorial and Reference", – Вильямс, 2017. – 1136 с.

  12. Yves Bertot, Nicolas Magaud and Paul Zimmermann, “A Proof of GMP Square Root”, Journal of Automated Reasoning, volume 29, 2002, pp. 225-252.

  13. https://gmplib.org.

  14. Tarek Ziadé. Expert Python Programming. – Packt Publishing Ltd., 2008. – 372 с.

  15. Doug Hellmann. The Python 3 Standart Library by Example. – Boston: Addison-Wesley 2017. – 1413 p.

  16. Герберт Шилдт. Java. Полное руководство, 10-е издание = Java. The Complete Reference, 10th Edition. – М.: «Диалектика», 2018. – 1488 с.

  17. М.С. Зуев, К.Г. Мирошников. Об одном криптографическом расширении Java (рус.) // Вестник ТГУ. – 2008.

  18. https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html

  19. https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html

  20. Фёдоров Д. Ю. Основы программирования на примере языка Python / Учебное пособие. – СПб.: Юрайт, 2018. – 167 с.

  21. В.Н. Говорухин, В.Г. Цибулин. Введение в maple. Математический пакет для всех. – 213 с.

  22. The Sage Development Team, 2020. – 93 p.

Қосымша 1


#include

#include

#include

#include

#include
#define MODULUS_SIZE 1024

#define BLOCK_SIZE (MODULUS_SIZE/8)

#define BUFFER_SIZE ((MODULUS_SIZE/8) / 2)
typedef struct {

mpz_t n;

mpz_t e;

} public_key;


typedef struct {

mpz_t n;

mpz_t e;

mpz_t d;

mpz_t p;

mpz_t q;

} private_key;
void print_hex(char* arr, int len)

{

int i;



for(i = 0; i < len; i++)

printf("%02x", (unsigned char) arr[i]);

}
void generate_keys(private_key* ku, public_key* kp)

{

char buf[BUFFER_SIZE];



int i;

mpz_t phi; mpz_init(phi);

mpz_t tmp1; mpz_init(tmp1);

mpz_t tmp2; mpz_init(tmp2);


srand(time(NULL));
mpz_set_ui(ku->e, 3);
for(i = 0; i < BUFFER_SIZE; i++)

buf[i] = rand() % 0xFF;

buf[0] |= 0xC0;

buf[BUFFER_SIZE - 1] |= 0x01;

mpz_import(tmp1, BUFFER_SIZE, 1, sizeof(buf[0]), 0, 0, buf);

mpz_nextprime(ku->p, tmp1);

mpz_mod(tmp2, ku->p, ku->e);

while(!mpz_cmp_ui(tmp2, 1))

{

mpz_nextprime(ku->p, ku->p);



mpz_mod(tmp2, ku->p, ku->e);

}


do {

for(i = 0; i < BUFFER_SIZE; i++)

buf[i] = rand() % 0xFF;

buf[0] |= 0xC0;

buf[BUFFER_SIZE - 1] |= 0x01;

mpz_import(tmp1, (BUFFER_SIZE), 1, sizeof(buf[0]), 0, 0, buf);

mpz_nextprime(ku->q, tmp1);

mpz_mod(tmp2, ku->q, ku->e);

while(!mpz_cmp_ui(tmp2, 1))

{

mpz_nextprime(ku->q, ku->q);



mpz_mod(tmp2, ku->q, ku->e);

}

} while(mpz_cmp(ku->p, ku->q) == 0);



mpz_mul(ku->n, ku->p, ku->q);
mpz_sub_ui(tmp1, ku->p, 1);

mpz_sub_ui(tmp2, ku->q, 1);

mpz_mul(phi, tmp1, tmp2);
if(mpz_invert(ku->d, ku->e, phi) == 0)

{

mpz_gcd(tmp1, ku->e, phi);



printf("gcd(e, phi) = [%s]\n", mpz_get_str(NULL, 16, tmp1));

printf("Invert failed\n");

}
mpz_set(kp->e, ku->e);

mpz_set(kp->n, ku->n);


return;

}
void block_encrypt(mpz_t C, mpz_t M, public_key kp)

{

mpz_powm(C, M, kp.e, kp.n);



return;

}
int encrypt(char cipher[], char message[], int length, public_key kp)

{

int block_count = 0;



int prog = length;

char mess_block[BLOCK_SIZE];

mpz_t m; mpz_init(m);

mpz_t c; mpz_init(c);


while(prog > 0)

{

int i = 0;



int d_len = (prog >= (BLOCK_SIZE - 11)) ? BLOCK_SIZE - 11 : prog;
mess_block[i++] = 0x00;

mess_block[i++] = 0x02;

while(i < (BLOCK_SIZE - d_len - 1))

mess_block[i++] = (rand() % (0xFF - 1)) + 1;

mess_block[i++] = 0x00;
memcpy(mess_block + i, message + (length - prog), d_len);
mpz_import(m, BLOCK_SIZE, 1, sizeof(mess_block[0]), 0, 0, mess_block);

block_encrypt(c, m, kp);


int off = block_count * BLOCK_SIZE;

off += (BLOCK_SIZE - (mpz_sizeinbase(c, 2) + 8 - 1)/8

mpz_export(cipher + off, NULL, 1, sizeof(char), 0, 0, c);
block_count++;

prog -= d_len;

}

return block_count * BLOCK_SIZE;



}
void block_decrypt(mpz_t M, mpz_t C, private_key ku)

{

mpz_powm(M, C, ku.d, ku.n);



return;

}
int decrypt(char* message, char* cipher, int length, private_key ku)

{

int msg_idx = 0;



char buf[BLOCK_SIZE];

*(long long*)buf = 0ll;

mpz_t c; mpz_init(c);

mpz_t m; mpz_init(m);


int i;

for(i = 0; i < (length / BLOCK_SIZE); i++)

{

mpz_import(c, BLOCK_SIZE, 1, sizeof(char), 0, 0, cipher + i * BLOCK_SIZE);



block_decrypt(m, c, ku);
int off = (BLOCK_SIZE - (mpz_sizeinbase(m, 2) + 8 - 1)/8); // See manual for mpz_export

mpz_export(buf + off, NULL, 1, sizeof(char), 0, 0, m);


int j;

for(j = 2; ((buf[j] != 0) && (j < BLOCK_SIZE)); j++);

j++;
memcpy(message + msg_idx, buf + j, BLOCK_SIZE - j);
msg_idx += BLOCK_SIZE - j;

}

return msg_idx;



}
int main()

{

int i;



mpz_t M; mpz_init(M);

mpz_t C; mpz_init(C);

mpz_t DC; mpz_init(DC);

private_key ku;

public_key kp;

mpz_init(kp.n);

mpz_init(kp.e);

mpz_init(ku.n);

mpz_init(ku.e);

mpz_init(ku.d);

mpz_init(ku.p);

mpz_init(ku.q);


generate_keys(&ku, &kp);

printf("---------------Private Key-----------------");

printf("kp.n is [%s]\n", mpz_get_str(NULL, 16, kp.n));

printf("kp.e is [%s]\n", mpz_get_str(NULL, 16, kp.e));

printf("---------------Public Key------------------");

printf("ku.n is [%s]\n", mpz_get_str(NULL, 16, ku.n));

printf("ku.e is [%s]\n", mpz_get_str(NULL, 16, ku.e));

printf("ku.d is [%s]\n", mpz_get_str(NULL, 16, ku.d));

printf("ku.p is [%s]\n", mpz_get_str(NULL, 16, ku.p));

printf("ku.q is [%s]\n", mpz_get_str(NULL, 16, ku.q));


char buf[6*BLOCK_SIZE];

for(i = 0; i < 6*BLOCK_SIZE; i++)

buf[i] = rand() % 0xFF;
mpz_import(M, (6*BLOCK_SIZE), 1, sizeof(buf[0]), 0, 0, buf);

printf("original is [%s]\n", mpz_get_str(NULL, 16, M));

block_encrypt(C, M, kp);

printf("encrypted is [%s]\n", mpz_get_str(NULL, 16, C));

block_decrypt(DC, C, ku);

printf("decrypted is [%s]\n", mpz_get_str(NULL, 16, DC));

return 0;

}

Қосымша 2



#include

#include

#include "cryptopp/modes.h"

#include "cryptopp/aes.h"

#include "cryptopp/filters.h"
int main(int argc, char* argv[]){
CryptoPP::byte key[CryptoPP::AES::DEFAULT_KEYLENGTH], iv[CryptoPP::AES::BLOCKSIZE];

memset(key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH);

memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE);
std::string plaintext = " бұл жолды шифрлау керек ";

std::string ciphertext;

std::string decryptedtext;
std::cout << " ашық мәтін (" << plaintext.size() << std::endl;

std::cout << plaintext;

std::cout << std::endl << std::endl;
CryptoPP::AES::Encryption aesEncryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);

CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, iv);


CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink(ciphertext));

stfEncryptor.Put(reinterpret_cast(plaintext.c_str()), plaintext.length() + 1);

stfEncryptor.MessageEnd();
std::cout << "**** шифрланған мәтін (" << ciphertext.size() << " )" << std::endl;
for (int i = 0; i < ciphertext.size(); i++){

std::cout << "0x" << std::hex << (0xFF & static_cast(ciphertext[i])) << " ";

}
std::cout << std::endl << std::endl;
CryptoPP::AES::Decryption aesDecryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);

CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption(aesDecryption, iv);


CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::StringSink(decryptedtext));

stfDecryptor.Put(reinterpret_cast(ciphertext.c_str()), ciphertext.size());

stfDecryptor.MessageEnd();
std::cout << "Decrypted Text: " << std::endl;

std::cout << decryptedtext;

std::cout << std::endl << std::endl;
return 0;

}






Достарыңызбен бөлісу:
1   ...   6   7   8   9   10   11   12   13   14




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

    Басты бет