This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2009年08月21日 04:51 by manis, last changed 2022年04月11日 14:56 by admin. This issue is now closed.
| Messages (10) | |||
|---|---|---|---|
| msg91800 - (view) | Author: Peter Manis (manis) | Date: 2009年08月21日 04:51 | |
The zipfile support in 2.6 that allows you pass a zipfile(with __main__.py inside) as the "script", does not support encrypted zipfiles. I view this as being a feature that could be useful to some. |
|||
| msg91803 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2009年08月21日 06:37 | |
Can you provide a patch? |
|||
| msg91893 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2009年08月23日 21:17 | |
Some (supportive) discussion on python-dev at http://mail.python.org/pipermail/python-dev/2009-August/091324.html . |
|||
| msg91896 - (view) | Author: Peter Manis (manis) | Date: 2009年08月23日 23:46 | |
I don't think I will be able to provide a patch. If I am correct this would live in Modules/zipimport.c and I do not have enough experience in C/C++ to add in the feature. If in the end zipimport ends up using Lib/zipfile.py then I can work on adding the feature. |
|||
| msg91897 - (view) | Author: Gregory P. Smith (gregory.p.smith) * (Python committer) | Date: 2009年08月24日 01:05 | |
The decryption provided by the zipfile module is for the worthless 32-bit crc based "encryption" of zipfiles. I think promoting the use of that is a bad idea. zipfile can be used by people to get their data out of such files. We should not encourage them to put it and/or their code into such a stupid format. -1 on supporting this. Anyways as to implementation details, yes you'd need a way to accept a key on the command line (or prompt for it using getpass?) and pass it to the import mechanism at import time. For zip files with only the contained file data "encrypted" (the only thing the zipfile module supports) a zip file could be checked for __init__.py and .py files without decrypting first so that a password is only prompted for when such a module is imported. Again I don't see value in that. |
|||
| msg91899 - (view) | Author: Alyssa Coghlan (ncoghlan) * (Python committer) | Date: 2009年08月24日 02:01 | |
You would also run in to the usual problems with any form of DRM: the password *will* exist in memory in order for zipimport to be able to use it, so anyone that really wants the password will be able to get hold of it. It also isn't as simple as just providing a single password - there can be multiple zip files on sys.path, so how is Python meant to know which password goes with which zipfile? Another -1 here. |
|||
| msg91901 - (view) | Author: Peter Manis (manis) | Date: 2009年08月24日 02:26 | |
My thinking behind this was not to be the ultimate security against someone getting the source, but more of a very high wall to keep out the majority of people. It seems like the best way to determine what file should be decrypted and when a password should be prompted is to look at the header of the zip file where it defines the encryption information as the zip file is loaded. Taking that approach would allow someone, if they wanted, to put multiple encrypted zip files in the path and be prompted for each one. That is not my planned usage of it, but someone else may have a use for that. Could someone point me in the right direction on where this functionality would live if implemented? In the event there is enough votes to prevent it from being added I would like to try to work on it so I can patch my own installations of Python. |
|||
| msg91938 - (view) | Author: Gregory P. Smith (gregory.p.smith) * (Python committer) | Date: 2009年08月24日 20:56 | |
The people who do not know how to get over that wall would be equally stumped if presented with tokenized .pyc or .pyo files. No fake encryption needed. |
|||
| msg95426 - (view) | Author: Alyssa Coghlan (ncoghlan) * (Python committer) | Date: 2009年11月18日 12:18 | |
A few pointers in case anyone decides to follow this up further: Zipfile execution is just a special case of normal zipimport: the zipfile's name is placed at the head of sys.path and a (very) rough equivalent of "import __main__" is then invoked. So for zipfile execution to support password protected zipfiles, general zipimport would need to support them as well. However, this runs into the problem that invocation of the zipimport module is largely implicit - the import engine invokes sys.path_hooks entries (which includes ZipImporter automatically) for a given sys.path entry and finds that, sure enough, ZipImporter recognises it and creates an appropriate object to handle it. So the trick lies in getting the password to the importer that needs to know it in order to open the zipfile. For the general case, you could create a new path hook that had a list of filename pattern<->password pairs that could be placed in sys.path_hooks ahead of the normal zipimport hook. If it saw a pattern it recognised, it could use the appropriate password to open the zipfile and return a corresponding importer object (you could do this largely independently of the standard library itself - PEP 302 is expressly designed to let third party developers run with this kind of idea). That wouldn't help much with zipfile execution though, as you still wouldn't have a mechanism for providing the password on the command line. |
|||
| msg168646 - (view) | Author: Alyssa Coghlan (ncoghlan) * (Python committer) | Date: 2012年08月20日 11:42 | |
Rejecting - if anyone really wants this. they can do it as their own custom import hook. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:56:52 | admin | set | github: 50998 |
| 2012年08月20日 11:42:53 | ncoghlan | set | status: open -> closed resolution: wont fix messages: + msg168646 stage: resolved |
| 2010年07月11日 01:54:37 | terry.reedy | set | versions: - Python 2.6, Python 3.0, Python 3.1, Python 2.7 |
| 2010年03月24日 13:52:48 | jcea | set | nosy:
+ jcea |
| 2009年11月18日 12:18:32 | ncoghlan | set | messages: + msg95426 |
| 2009年08月24日 20:56:49 | gregory.p.smith | set | messages: + msg91938 |
| 2009年08月24日 02:26:02 | manis | set | messages: + msg91901 |
| 2009年08月24日 02:01:56 | ncoghlan | set | nosy:
+ ncoghlan messages: + msg91899 |
| 2009年08月24日 01:05:31 | gregory.p.smith | set | nosy:
+ gregory.p.smith messages: + msg91897 |
| 2009年08月23日 23:46:38 | manis | set | messages: + msg91896 |
| 2009年08月23日 21:19:17 | gvanrossum | set | nosy:
- gvanrossum |
| 2009年08月23日 21:17:28 | gvanrossum | set | nosy:
+ gvanrossum messages: + msg91893 |
| 2009年08月21日 06:37:22 | loewis | set | nosy:
+ loewis messages: + msg91803 |
| 2009年08月21日 04:51:41 | manis | create | |