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