logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak użyć biblioteki Crypto++ do szyfrowania RSA w C++?

Z8 21 Sty 2007 13:34 6923 0
REKLAMA
  • #1 3469204
    Z8
    Poziom 12  
    Posty: 90
    Pomógł: 4
    Ocena: 9
    Witam

    Z kryptograii dostałem zadanie by zrobic program szyfrujacy asymetrycznie.

    Program ma szyfrować i deszyfrować oraz generować parę kluczy (publiczny i prywatny) do pliku. Do szyfrowania należy wykorzystać odpowiednie biblioteki kryptograficzne.

    Znalazłem bibliotekę Crypto++ http://www.cryptopp.com/ tylko nie wiem w jaki sposób ją wykorzystać w projekcie.
    Używam Dev-C++ oraz Visual C++ 2005 Expres Edition

    Znalazłem na necie gotowy program z wykorzystaniem Crypto++

    
    
    Przyklad szyfrowania kluczem publicznym i
    deszyfrowania kluczem prywatnym RSA
    (zastosowanie: ustalanie symetrycznych kluczy sesyjnych)
    
    Biblioteka Crypto++ v.5.1
    */
    
    #include "stdafx.h"
    
    #include <iostream>
    
    #include "cryptopp/rsa.h"
    #include "cryptopp/filters.h"
    #include "cryptopp/osrng.h"
    #include "cryptopp/base64.h"
    #include "cryptopp/files.h"
    #include "cryptopp/sha.h"
    
    using namespace CryptoPP;
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    		//jakas informacja (domyslnie losowy klucz sesyjny)
    	string shortMessage =
    		"Wiadomosc musi byc krotsza niz rozmiar klucza RSA minus zalacznik OAEP";
     
    	string file;
    	
    	cout << "Szyfrowanie wiadomosci" << endl;
    	cout << "Klucz publiczny: ";
    	getline(cin, file);
    	RSAES_OAEP_SHA_Encryptor pubkey( FileSource(file.c_str(), true,
    		new Base64Decoder()));
    
    	//ustalamy potrzebny rozmiar bloku korzystajac z metody pubkey.CiphertextLength(),
    	//po podaniu rozmiaru bloku niezaszyfrowanego, zwraca ona rozmiar jaki zajmie kryptogram
    	SecByteBlock sbbCipherText(pubkey.CiphertextLength(shortMessage.size()));
    
    	AutoSeededRandomPool rng;
    
    	pubkey.Encrypt(rng, (byte const*)shortMessage.data(), shortMessage.size(),
    		sbbCipherText.begin());
    
    	FileSink(".\\encrypted.dat").Put(sbbCipherText.begin(), sbbCipherText.size());
    	cout << "Kryptogram umieszczono w pliku \'encrypted.dat\'" << endl;
    
    	cout << "Deszyfrowanie" << endl; 
    	cout << "Klucz prywatny: ";
    	getline(cin, file);
    	RSAES_OAEP_SHA_Decryptor privkey( FileSource(file.c_str(), true, new Base64Decoder()));
    
    	//ustalamy wymagany rozmiar bloku korzystajac z metody privkey.MaxPlaintextLength(),
    	//po podaniu rozmiaru kryptogramu, zwraca ona maksymalny rozmiar jaki moze przyjac
    	//odszyfrowana wiadomosc
    	SecByteBlock sbbPlainText(privkey.MaxPlaintextLength(sbbCipherText.size()));
    
    	FileSource(".\\encrypted.dat", true, new ArraySink(sbbPlainText.begin(), sbbPlainText.size() ));
    
    	DecodingResult dec = privkey.Decrypt(rng, sbbCipherText.begin(), sbbCipherText.size(),
    		sbbPlainText.begin());
    	
    	FileSink(".\\decrypted.dat").Put(sbbPlainText.begin(), dec.messageLength);
    	cout << "Odszyfrowana wiadomosc zostala umieszczona w pliku \'decrypted.dat\'" << endl;
    
    	return 0;
    }
    


    Przy kompilacji wywala mi pełno różnych blędów związanych pewnie z tą biblioteką.

    Proszę o wytłumaczenie mi w jaki sposób mam dodać tą bibliotekę do Visuala c++ lub do Dev C++ żeby ten program mógł skompilować.
  • REKLAMA
REKLAMA