hlubenow wrote: > hlubenow wrote: > >> ts-dev wrote: >> >>> On Apr 6, 3:19 pm, hlubenow <[EMAIL PROTECTED]> wrote: >>>> recently there was a thread about hiding the python-script from the >>>> user. The OP could use >>> >>> Interesting - thanks >> >> Well, testing it, it doesn't seem to work very well ... >> >> It seems, Python-code is rather difficult to obfuscate, probably because >> of its clear syntax and indentations. Here's yet another approach: >> >> > http://pythonhacker.is-a-geek.net/my_programs/pyfuscate/pyfuscate-0.1.zip/view >> >> H. > > That didn't work very well either :(. > > Ok, but now I can offer a real secure solution: > > You can have real encryption in Python using this modules: > > > http://www.amk.ca/files/python/crypto/pycrypto-2.0.1.tar.gz > > and > > http://sourceforge.net/projects/yawpycrypto > > Below I post a code-example that I've written some time ago. With it, > encrypting text is rather easy. > > Then you have to program a start-script, that reads in your script and the > decryption-key. The decryption-key must be encrypted too. Such a encrypted > key can be generated by the modules if you don't pass a password to my > function "doEncrypt(). The decryption-key must then be hidden somewhere > within the encrypted program-script. That's because, if the user knows > where to find the key, he can decrypt the program-script. > > If your start-script is written, everything should work automatically, one > shouldn't nearly notice the decryption-process. > > Ok, here's my example code, how to encrypt and decrypt some text with the > modules: > > ---------------------------------------------------------------------------- > > #!/usr/bin/env python > > import os > import sys > import base64 > > from yawPyCrypto.Cipher import DecryptCipher, EncryptCipher > from yawPyCrypto.Cipher import ZipDecryptCipher, ZipEncryptCipher > from yawPyCrypto.Constants import CIPHER_BLOWFISH, MODE_CBC > > > def doEncrypt(text, passw = None): > > e = EncryptCipher(passw, CIPHER_BLOWFISH, MODE_CBC) > e.feed(text) > e.finish() > encryptedtext = e.data > > if passw != None: > passwr = passw > else: > passwr = e.password > > a = (encryptedtext, passwr) > return a > > > def doDecrypt(encryptedtext, passw): > d = DecryptCipher(passw) > d.feed(encryptedtext) > d.finish() > decoded = (d.data) > return decoded > > > # Calling the encryption routine. > # If you just pass the text to encrypt, a password is generated: > > a = doEncrypt("For your eyes only !", "Melina") > > > # Just trying to clean the screen: > > if sys.platform == "win32": > os.system("cls") > else: > os.system("clear") > > print > print "Hello !" > print > print "I just encrypted some text. It looks like this now:" > print > > print base64.b64encode(a[0]) > > print > print 'Please notice, that I just encoded the text once more using "base64.b64encode()" to make it printable.' > print > print "The password for decryption is: " > print > print base64.b64encode(a[1]) > print > print "Let's decrypt again (the original password must be passed without b64encoding):" > print > print doDecrypt(a[0], a[1]) > print > > ---------------------------------------------------------------------------- > > See you > > H.
This still has a problem: The start-script has to know how to decrypt the main-script and the start-script is visible, so the user can see how it does it. Perhaps one could obfuscate the start-script or write a C extension, that does decrypting instead of the start-script. This is getting rather complicated ... H. -- http://mail.python.org/mailman/listinfo/python-list