Αλλαγή γραμματοσειράς
Ημερομηνία Τρί Μαρ 26, 2019 3:35 pm
foss.aueb.gr
Αρχική Κοινότητας Foss Aueb Tutorials - HowTo's - Articles

Tutorials - HowTo's - Articles

Cryptography in Linux with Crypto++ library and C++

Tutorials, How-to's, articles and other stuff by foss.aueb members

Cryptography in Linux with Crypto++ library and C++

Δημοσίευσηαπό TNT » Τρί Μαρ 02, 2010 2:02 pm

Με το συγκεκριμένο tutorial θα σας δείξω πως να χρησιμοποιήσετε τη βιβλιοθήκη crypto++ για να κρυπτογραφήσετε οτιδήποτε σε c++
Για οικονομία χώρου δεν λέω περισσότερα για τη βιβλιοθήκη, περισσότερα εδώ: http://www.cryptopp.com/
Η βιβλιοθήκη υλοποιεί γνωστούς συμμετρικούς, ασύμμετρους αλγόριθμους κρυπτογράφησης και μονόδρομες συναρτήσεις σύνοψης

ΜΕΡΟΣ 1
MD5

Eγκατάσταση
Κάντε εγκατάσταση πρώτα από όλα τη βιβλιοθήκη crypto++
Θα τη βρείτε το πιθανότερο με το όνομα libcrypto++
Εγκαταστήσε και τη βιβλιοθήκη και το devel πακέτο.

Θα ξεκινήσω με ένα πολύ γνωστό αλγόριθμο, τον MD5.

MD5 - sample
Κώδικας: Επιλογή όλων
#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
#include <cryptopp/md5.h>
#include <cryptopp/filters.h>
#include <cryptopp/hex.h>
#include <iostream>
#include <string.h>
using namespace CryptoPP;
using namespace Weak1;
using namespace std;

int main(int argc, char** argv){
   MD5 hash;
   //save digest message here
   byte digest[MD5::DIGESTSIZE];
   //value to hash
   string message = "TNT";
   //calculate hash
   hash.CalculateDigest(digest, (const byte*)message.c_str(), message.length());
   //get hash value in md5hash string variable
   HexEncoder encoder;
   string md5hash;
   encoder.Attach( new StringSink( md5hash ) );
   encoder.Put( digest, sizeof(digest) );
   encoder.MessageEnd();
   //print hash
   cout << md5hash << endl;
   return 0;
}


Compiling
g++ -o md5 md5.cpp /usr/lib/libcryptopp.a

Run
./md5
Θα τυπώσει: 3ED8D415AB1BBAC628429A85851E53B6 για το κείμενο 'ΤΝΤ'
Τελευταία επεξεργασία απο TNT την Τρί Μαρ 02, 2010 7:32 pm, επεξεργάστηκε 1 φορές συνολικά.
who am i?
Άβαταρ μέλους
TNT
Open Member
 
Δημοσ.: 119
Εγγραφη: Κυρ Δεκ 20, 2009 2:23 pm

Re: Cryptography in Linux with Crypto++ library and C++

Δημοσίευσηαπό TNT » Τρί Μαρ 02, 2010 7:16 pm

Μέρος 1b

Compiling
μηχάνημα με 64bit επεξεργαστή

g++ -o md5 md5.cpp /usr/lib64/libcryptopp.a
Τελευταία επεξεργασία απο TNT την Τρί Μαρ 02, 2010 7:29 pm, επεξεργάστηκε 1 φορές συνολικά.
who am i?
Άβαταρ μέλους
TNT
Open Member
 
Δημοσ.: 119
Εγγραφη: Κυρ Δεκ 20, 2009 2:23 pm

Re: Cryptography in Linux with Crypto++ library and C++

Δημοσίευσηαπό TNT » Τρί Μαρ 02, 2010 7:26 pm

Μέρος 2
SHA1 (SHA128) και SHA256

SHA - SHA1 (128) sample
Κώδικας: Επιλογή όλων
#include <cryptopp/sha.h>
#include <cryptopp/filters.h>
#include <cryptopp/hex.h>
#include <iostream>
#include <string.h>
using namespace CryptoPP;
using namespace std;

int main(int argc, char** argv){
   SHA hash;
   //save digest message here
   byte digest[SHA::DIGESTSIZE];
   //value to hash
   string message = "TNT";
   //calculate hash
   hash.CalculateDigest(digest, (const byte*)message.c_str(), message.length());
   //get hash value in md5hash string variable
   HexEncoder encoder;
   string SHAhash;
   encoder.Attach( new StringSink( SHAhash ) );
   encoder.Put( digest, sizeof(digest) );
   encoder.MessageEnd();
   //print hash
   cout << SHAhash << endl;
   return 0;
}

Θα τυπωθεί: FFD0260F2CDAA27329C5779CF4866CD1ED93C22E για το κείμενο 'ΤΝΤ'

SHA-2 - SHA256 sample
Κώδικας: Επιλογή όλων
#include <cryptopp/sha.h>
#include <cryptopp/filters.h>
#include <cryptopp/hex.h>
#include <iostream>
#include <string.h>
using namespace CryptoPP;
using namespace std;

int main(int argc, char** argv){
   SHA256 hash;
   //save digest message here
   byte digest[SHA256::DIGESTSIZE];
   //value to hash
   string message = "TNT";
   //calculate hash
   hash.CalculateDigest(digest, (const byte*)message.c_str(), message.length());
   //get hash value in md5hash string variable
   HexEncoder encoder;
   string SHA256hash;
   encoder.Attach( new StringSink( SHA256hash ) );
   encoder.Put( digest, sizeof(digest) );
   encoder.MessageEnd();
   //print hash
   cout << SHA256hash << endl;
   return 0;
}

Θα τυπωθεί: 0E323F87076067FF1E567A2871BF9E9A35DA0554BB791230923E53097DDCE232 για το κείμενο 'ΤΝΤ'

Για τις υπόλοιπες συναρτήσεις του sha (για 512, 384 και 224 bit) υλοποιούνται αλλάζοντας στο παραπάνω κώδικα το SHA256 με SHA512, SHA384 και SHA224 αντίστοιχα.
who am i?
Άβαταρ μέλους
TNT
Open Member
 
Δημοσ.: 119
Εγγραφη: Κυρ Δεκ 20, 2009 2:23 pm

Re: Cryptography in Linux with Crypto++ library and C++

Δημοσίευσηαπό TNT » Τετ Μαρ 03, 2010 10:02 am

Μέρος 3
RIPEMD hash algorithm

RIPEMD-128 sample
Κώδικας: Επιλογή όλων
#include <cryptopp/ripemd.h>
#include <cryptopp/filters.h>
#include <cryptopp/hex.h>
#include <iostream>
#include <string.h>
using namespace CryptoPP;
using namespace std;

int main(int argc, char** argv){
   RIPEMD128 hash;
   //save digest message here
   byte digest[RIPEMD128::DIGESTSIZE];
   //value to hash
   string message = "TNT";
   //calculate hash
   hash.CalculateDigest(digest, (const byte*)message.c_str(), message.length());
   //get hash value in RIPEMD128hash string variable
   HexEncoder encoder;
   string RIPEMD128hash;
   encoder.Attach( new StringSink( RIPEMD128hash ) );
   encoder.Put( digest, sizeof(digest) );
   encoder.MessageEnd();
   //print hash
   cout << RIPEMD128hash << endl;
   return 0;
}


Θα τυπωθεί: A7503EFC38A6F2AC56922819316E6645 για το κείμενο 'ΤΝΤ'

Για τις υπόλοιπες συναρτήσεις του RIPEMD (για 256, 160 και 320 bit) υλοποιούνται αλλάζοντας στο παραπάνω κώδικα το RIPEMD128 με RIPEMD256, RIPEMD160 και RIPEMD320 αντίστοιχα.


Δεν θα ασχοληθούμε άλλο με τις συναρτήσεις μονόδρομης σύνοψης, οι υπόλοιπες, Tiger και WHIRLPOOL, υλοποιούνται με τον ίδιο τρόπο, κάνοντας include το κατάλληλο αρχείο.
Δείτε στο φάκελο: /usr/include/cryptopp

to be continued..
who am i?
Άβαταρ μέλους
TNT
Open Member
 
Δημοσ.: 119
Εγγραφη: Κυρ Δεκ 20, 2009 2:23 pm


Επιστροφή στην Tutorials - HowTo's - Articles

cron
foss.aueb.gr

Μελη σε συνδεση

Συνολικά υπάρχει 1 μέλος συνδεδεμένο: 0 εγγεγραμμένο, 0 κρυφοί και 1 επισκέπτης (με βάση τα μέλη που έχουν συνδεθεί τα τελευταία 5 λεπτά)
Περισσότερα μέλη σε σύνδεση 167 την Κυρ Οκτ 02, 2016 2:55 am

Μέλη σε αυτή την Δ. Συζήτηση : Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης

Γενέθλια

Κανένα μέλος δεν έχει γενέθλια σήμερα