Code_Fouad_Teniou program allows you to encrypt and decrypt text by using a key ( made_key). However, the key is a set of numbers selected at random and the program allows you to create an infinity numbers of this key, which make the code impossible to crack. Though, I used a metaclass to access the methods used in my program to allow permutation of such methods in a way to perform desirable tasks and in a specific order to suit the need of the programmer’s outcome.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | #On the name of ALLAH and may the blessing and peace of Allah
#be upon the Messenger of Allah Mohamed Salla Allahu Aliahi Wassalam.
#Author : Fouad Teniou
#Date : 13/10/09
#version :2.6.1
"""
Code_Fouad_Teniou class uses a function made_key, to generate a
random key every time you try to encrypt a text, by using FtEncrypt
function and it uses the same key to decrypt the same text by using
the FtDecrypt method.
The metaclass allows a special access to these methods.
"""
import random
class Code_Fouad_Teniou(object):
"""
Class that represent a code of encryption and decryption
using a made_key method
"""
my_list = []
my_key = []
my_dict = {}
def made_key(self):
"""
A method to create a set of values
and return a random' key
"""
# select a random number from 1 to infinity
ran_number = random.randint(1,99)
# create a random set based on the first number you chose
set = xrange(ran_number,28*ran_number,ran_number)
# increase the value of every number in the set
for item in set:
item += 3
Code_Fouad_Teniou.my_key.append(item)
#return a random key
return Code_Fouad_Teniou.my_key
def FtEncrypt(self,text):
""" Encrypt a text into a list of values """
self.text = text
EncryptText = []
characters = "abcdefghijklmnopqrstuvwxyz "
#attempt to append my_list and update my_dict
#using a random set of alphabet and a random made_key
try:
for char in random.sample(characters,27):
Code_Fouad_Teniou.my_list.append(char)
Code_Fouad_Teniou.my_dict.update(zip(Code_Fouad_Teniou.my_key,Code_Fouad_Teniou.my_list))
for item in text.lower():
for i in Code_Fouad_Teniou.my_dict.items():
if item == i[1]:
EncryptText.append(i[0])
return EncryptText
#Raise AttributeError if text is not a string
except AttributeError:
raise AttributeError, "\n<Please re-enter your text as a 'string'"
def FtDecrypt(self,EncryptText):
""" Decript a list of values into the orginal text """
self.EncryptText = EncryptText
characters = "abcdefghijklmnopqrstuvwxyz "
DecripText = ''
#attempt to decrypt the text using the made_key and EncryptText
try:
for item in self.EncryptText:
DecripText += Code_Fouad_Teniou.my_dict[item]
return DecripText
#Raise KeyError if a different key was used to encrypt the text
except KeyError:
print "\n<Please use the right code(made_key) to decrypt your text"
# Allowing Access of class Code_Fouad_Teniou Methods
def Method_Access(function):
""" Attempted operation to access a function """
pass
class AccessMeta(type):
def __new__(cls,names,bases,namespaces):
for item in bases:
if isinstance(item,AccessMeta):
pass
else:
for code in namespaces['code_steps']:
if code in namespaces:
pass
else:
namespaces[code] = Method_Access(getattr(item,code))
return super(AccessMeta,cls).__new__(cls,names,bases,namespaces)
class Access:
__metaclass__ = AccessMeta
if __name__ == "__main__":
class AccessAppend(Access,Code_Fouad_Teniou):
cft = Code_Fouad_Teniou()
code_steps = "made_key FtEncrypt FtDecrypt ".split()
AccessAppend().cft.made_key()
encrypt = AccessAppend().cft.FtEncrypt('hello world')
print encrypt
decrypt = AccessAppend().cft.FtDecrypt(encrypt)
print decrypt
#######################################################################
|
Mr Fouad Teniou new link:
1-Profile
2-Career
3-Photos
4-Pi Quotation
5-Beyond Space Project
6-Door's shape Design (photoshop art work) and quotation
https://acrobat.com/#d=aEjxtq78QkGKUxa*UprkZQ
What you have implemented is a form of substitution cypher link. Albeit the mapping between plaintext and cyphertext is chosen randomly. There exist programs that will crack this type of cypher quite easily, given a fair amount of encrypted text.
Thank you,
However, I invented the code_Fouad_Teniou for my own personal use and decided to share it with others, the fact that it is impossible to crack, while others knowing the code.
This is because, it generates an infinity numbers of keys by increasing the random number range ( ran_number = random.randint(1,9999….) ), and no computer is able to crack infinity.
ran_number (and the my_key list) aren't important at all; you might as well use 28 arbitrary Chinese characters for what matters. The real encription happens in the random.sample(characters, 27) line, which scrambles the letters <--> numbers mapping. As someone already pointed out, a simple substitution cipher like this can be easily reversed when enough encrypted text is available - you may be interested in Al-Kindi, a Muslim mathematician from IX century who solved this problem; see http://www.simonsingh.net/The_Black_Chamber/crackingsubstitution.html
A shorter version that does exactly the same as yours:
The following is a Code_Fouad_Teniou encrypted message.
[165,159,27,27,9,15,123,165,57,147,129,51,87,153,69,147,123, 33,147,15,117,27,147,75,51,123,57,9,159,87,75,9,27,69,147, 9,135,15,57,147,111,27,57,57,153,165,27,147,153,57,147,153, 147,75,135,153,33,33,27,123,165,27,147,9,51,147,153,75,9,15, 117,27,57,9,153,9,27,147,159,27,153,69,27,159,57,147,153,123, 69,147,153,57,147,153,123,147,123,33,147,27,93,153,111,105,33, 27,147,9,51,147,57,135,51,39,147,21,51,87,147,21,51,87,159, 147,75,21,105,135,27,159,147,15,57,147,123,51,9,147,87,123, 141,159,27,153,45,153,141,33,27,147,123,33,147,15,147,27,93, 105,27,75,9,147,9,135,15,57,147,111,27,57,57,153,165,27,147, 9,51,147,141,27,147,99,87,15,75,45,33,21,147,69,27,75,159, 21,105,9,27,69,147,153,123,69,147,9,135,27,147,105,33,153,15, 123,9,27,93,9,147,105,51,57,9,27,69,147,141,153,75,45,147, 123,33,147,51,123,147,153,75,9,15,117,27,57,9,153,9,27,147, 147,9,51,147,105,51,57,9,27,159,147,105,33,27,153,57,27,147, 105,87,9,147,153,147,123,27,39,33,15,123,27,147,153,129,9,27, 159,147,153,123,21,147,123,33,147,21,51,87,147,57,27,27,147, 123,33,147,141,21,147,69,27,9,27,159,111,15,123,15,123,165, 147,9,135,27,147,165,159,27,153,9,27,57,9,147,75,51,111,111, 51,123,147,69,15,117,15,57,51,159,147,51,129,147,9,135,27, 147,69,15,129,129,27,159,27,123,75,27,147,141,27,9,39,27,27, 123,147,153,123,21,147,9,39,51,147,123,33,147,75,51,69,27,57, 147,51,123,27,147,75,153,123,147,27,153,57,15,33,21,147,69, 27,9,27,159,111,15,123,27,147,39,135,153,9,147,9,135,27,147, 117,153,33,87,27,147,51,129,147,21,51,87,159,147,159,153,123, 123,87,111,141,27,159,147,39,153,57,147,123,33,147,153,57,147, 165,153,141,159,15,27,33,147,105,51,15,123,9,27,69,147,51,87, 9,147,9,135,27,147,75,135,153,33,33,27,123,165,27,147,15,57, 147,9,51,147,69,27,9,27,159,111,15,123,27,147,9,135,27,147, 111,153,105,105,15,123,165,147,141,27,9,39,27,27,123,147,123, 33,147,9,135,27,147,75,51,69,27,57,147,153,123,69,147,9,135, 27,147,33,153,9,15,123,147,33,27,9,9,27,159,57,147,147,45, 123,51,39,15,123,165,147,9,135,27,147,129,159,27,99,87,27, 123,75,21,147,51,129,147,87,57,27,147,51,129,147,117,153,159, 15,51,87,57,147,123,33,147,33,27,9,9,27,159,57,147,153,123, 69,147,75,51,111,111,51,123,147,39,51,159,69,57,147,27,57, 105,27,75,15,153,33,33,21,147,57,135,51,159,9,147,51,123,27, 57,147,123,33,147,159,27,165,153,159,69,57,147,123,33,147,159, 51,69,123,27,21,147,69,159,27,123,9,135,147]
This took about 10 mins and I'm very far from being a cryptologist. I don't think I'd be happy to use this for anything I wanted to keep secret.
GREETINGS FOUAD
IVE CONSTRUCTED THIS MESSAGE AS A CHALLENGE TO ACTIVESTATE READERS AND AS AN EXAMPLE TO SHOW YOU YOUR CYPHER IS NOT UNBREAKABLE
I EXPECT THIS MESSAGE TO BE QUICKLY DECRYPTED AND THE PLAINTEXT POSTED BACK ON ACTIVESTATE TO POSTER PLEASE PUT A NEWLINE AFTER ANY NL YOU SEE
BY DETERMINING THE GREATEST COMMON DIVISOR OF THE DIFFERENCE BETWEEN ANY TWO CODES ONE CAN EASILY DETERMINE WHAT THE VALUE OF YOUR RANNUMBER WAS
AS GABRIEL POINTED OUT THE CHALLENGE IS TO DETERMINE THE MAPPING BETWEEN THE CODES AND THE LATIN LETTER KNOWING THE FREQUENCY OF USE OF VARIOUS LETTERS AND COMMON WORDS ESPECIALLY SHORT ONES
REGARDS
RODNEY DRENTH
Thank you Genellina,
I would like to inform you that using a key for encryption is extremely important, and I used the ran_number and my_list for the purpose( creating the key) , and I would like to thank you again for referring to the Muslim Mathematician Al-Kindi
To Andreas Tawn,
I noticed an encrypted message left by Rodney Drenth, but it did not make sense to me, because every message encrypted needs a key for every letter in the alphabet before you can decrypt the text.
And if you are willing to take a challenge I can always leave you a message which I will write myself, and you try to prove me wrong.
Fouad,
Andreas has correctly decrypted the message that I had posted. He did so using only the information in the post. I did not supply him with any key or other information.
The last sentence is incomplete, due to an omission on my part. I wanted to say: Knowing the frequency of use of various letters and common words, especially short ones, is the key.
Finally, Fouad, your lack of understanding never ceases to amaze me.
What Rodney said is correct, I didn't have any assistance or the encrypting key. But feel free to post some encrypted text of your own and I'll have a go at decrypting it.
I've posted the code I used below. The important part is the order of the characters in fMap.
I started with the standard English character frequency table then swapped pairs of characters as words started to appear. Obviously, as the character frequency in Rodney's message is unique, the substitution order in fMap will only work with this text. This isn't a generalised decryption tool.
Thank you,
I would like you to prove me wrong and try to brake Code_Fouad_Teniou ( encrypted message), which I wrote myself and saved a copy on a CD. And unless you prove me wrong, there is no need for other comments.
[31845, 65456, 17693, 12386, 61918, 26538, 30076, 61918, 26538, 30076, 31845, 65 456, 54842, 49535, 31845, 28307, 38921, 31845, 31845, 44228, 38921, 19462, 38921 , 31845, 28307, 31845, 30076, 12386, 61918, 26538, 65456, 61918, 26538, 54842, 4 9535, 58380, 26538, 30076, 31845, 35383, 31845, 17693, 38921, 58380, 31845, 3184 5, 65456, 31845, 54842, 49535, 38921, 47766, 31845, 65456, 31845, 44228, 38921, 19462]
PS.
I have increased the ran_number = random.randint(1,9999)
And I added extra characters ‘0123456789 , . ;
And I added extra characters [0123456789 , . ;]
Why have you felt the need to add non-latin characters to your input? To make it harder to decrypt?
You must be aware that the strength of a good encryption scheme is independent of its input data. If your method can't encrypt long (500+ characters), simple English text without punctuation then it can't be described as strong.
I'll invite you to take a number of English words (100+), separated by spaces, encrypt them using your method and post the resulting list here.
I would like to remind you that I made it clear in my last comment, that unless you can decrypt my encrypted message, there is no need for your comments.
However, you should know that I made a statement that no one can brake Code_Fouad_Teniou and you stated that you can do in less than 10mn.
I will be waiting…………………………forever,
PS.
My message decryption is available on my CD for you and others whenever you made an apology for your statement.
Regards
Fouad Teniou
I just realised that you do not have any programs added to ASPN, thus I would like to let you know that I do have enemies trying to put me off writing python code and the Original Scottish and Chinese Air Force are aware of them and watching them at every level including the place where I live.
Fouad Teniou
A single and very short message, containing a few letters alone, cannot be deciphered, even for very trivial encodings. Longer messages, or repeatedly using the same key for short ones, increase the probability of the code being deciphered.
A good code is hard to decipher EVEN when used on a long text.
In message #5 above, a moderately long message was promptly decoded. I would never use Code_Fouad_Teniou or a similar technique for anything serious, but if you do, be aware of its great limitations.
In the short story The Gold-Bug, by Edgar Allan Poe, a guy finds a treasure by solving a message encoded exactly like yours; you may find it interesting.
This is what I got analyzing the encoded message using a similar program as Andreas Tawn above:
(looks like NL means \n). It's a short message and one can only guess the missing _ characters. Probably a second message of the same length would be enough to decipher it completely.
Thank you for trying to decrypt my message, but unfortunately you were wrong. And this is not my message.
And I would like to post for you a longer message, since you think that you will have a better chance of solving the message, by increasing the probability, and I promise you again that it is impossible to decrypt Code_Fouad_Teniou , but you can always try.
Here a new longer message,
[9591, 278055, 268467, 278055, 354759, 28767, 278055, 9591, 278055, 9591, 143823 , 383523, 278055, 134235, 9591, 278055, 124647, 249291, 47943, 278055, 115059, 3 73935, 124647, 278055, 76707, 182175, 373935, 268467, 19179, 9591, 373935, 32599 5, 278055, 38355, 278055, 38355, 373935, 230115, 258879, 278055, 162999, 220527, 278055, 182175, 38355, 316407, 28767, 239703, 278055, 306819, 9591, 239703, 316 407, 28767, 38355, 316407, 28767, 57531, 201351, 67119, 258879, 278055, 364347, 239703, 278055, 182175, 278055, 9591, 95883, 124647, 373935, 278055, 239703, 143 823, 278055, 268467, 373935, 325995, 278055, 383523, 325995, 278055, 220527, 278 055, 57531, 278055, 38355, 373935, 220527, 278055, 306819, 220527, 278055, 29723 1, 278055, 67119, 278055, 9591, 278055, 220527, 268467, 28767, 364347, 325995, 3 73935, 95883, 325995, 278055, 268467, 38355, 373935, 143823, 278055, 268467, 239 703, 373935, 9591, 278055, 143823, 383523, 278055, 134235, 278055, 249291, 32599 5, 278055, 268467, 38355, 28767, 76707, 278055, 268467, 278055, 373935, 325995, 373935, 230115, 325995, 278055, 239703, 316407, 28767, 278055, 162999, 268467, 2 39703, 278055, 57531, 373935, 57531, 28767, 306819, 19179, 38355, 239703, 278055 , 124647, 373935, 230115, 258879, 278055, 162999, 57531, 201351, 278055, 325995]
A switch to C# and a new link
http://archive.msdn.microsoft.com/fouadteniou