diff --git a/include/playfair.h b/include/playfair.h index 7f51ced7e3069c56fde4148dc9979957023617f7..d3fb0666978888ee867fe737bdce6e16d9c04357 100644 --- a/include/playfair.h +++ b/include/playfair.h @@ -1,2 +1,7 @@ #include <iostream> +#include <string> +#include <vector> +#include <iterator> +std::vector< std::vector<char> > createKM ( const std::string key); +std::string playfair(std::string text , const std::string key ); diff --git a/playfair.cpp b/playfair.cpp index c29fae5aa1d6571fd2d7075aa8822ce5c22a3d86..ec049112ac7847cb53de2c29b842ba4fea418d22 100644 --- a/playfair.cpp +++ b/playfair.cpp @@ -1,2 +1,41 @@ #include "include/playfair.h" + +#define _charbit(X) (1 << (X - 'a')) + + +std::vector< std::vector<char> > createKM ( const std::string key){ + std::vector< std::vector<char> > mKey(5, std::vector<char>(5)); + std::string abc(key + "abcdefghijklmnopqrstuvxwyz"); + int mask =0; + //mask with 32 bits for the 25 letter alfabet + int si=0; + for(int i=0; i<5; ++i){ + for(int j=0; j<5; ++j){ + while( (_charbit(abc[si]) & mask)!=0 ) + ++si; + mask = mask | _charbit(abc[si]); + + if (abc[si] == 'i' || abc[si] == 'j'){ + mask = mask | (_charbit('j') | _charbit('i')); + } + + mKey[i][j] = abc[si]; + } + } + return mKey; +} + +std::string playfair(std::string text, const std::string key){ + std::vector< std::vector <char> > mKey(createKM(key)); + for (int i=0; i<5; ++i){ + for (int j=0; j<5; ++j){ + std::cout << mKey[i][j] << ' '; + } + std::cout << std::endl; + } + + + //TODO:change + return text; +} diff --git a/playfair.o b/playfair.o new file mode 100644 index 0000000000000000000000000000000000000000..bd96c5f689a85f39d9613e64fa6e361a62a73fe1 Binary files /dev/null and b/playfair.o differ diff --git a/playunfair b/playunfair new file mode 100755 index 0000000000000000000000000000000000000000..25214f30dda0255c6fca59324b72bb581049e10a Binary files /dev/null and b/playunfair differ diff --git a/playunfair.cpp b/playunfair.cpp index 6da456dc1495d9713600a0c6e2d0618c0241b1c9..7ca0f88aa9ad178249a3fdb55a90be913a166d42 100644 --- a/playunfair.cpp +++ b/playunfair.cpp @@ -27,6 +27,6 @@ int main(int argc, char *argv[]){ std::cout << text.str() << std::endl; //chamar play fair passando string e chave - //crip = playfair(text.str(), key); + crip = playfair(text.str(), key); return 0; } diff --git a/playunfair.o b/playunfair.o new file mode 100644 index 0000000000000000000000000000000000000000..060fc99a4b5e7b17bbf29b8304eccd926094093d Binary files /dev/null and b/playunfair.o differ