kxiaong
2020-07-21 13:20:24 +08:00
如果是 module 一级的函数,理论上是不可能的。
类中封装的函数可以使用双下划线开头,使方法变成私有方法。module 一级的方法事实上跟包中定义的 class 是同一级别,而 python 对包一级的对象和函数,只有约定俗成的访问控制,而非强制。
我猜想一个可能比较 dirty 的方法:
使用一个字符串、时间戳与一个枚举的随机数做 md5,产生的结果作为一个私有函数的前缀,比如:
`fun_prefix = hashlib.md5(encryptStr + str(time.time() )+ str(randInt) ).hexdigit()`
你的私有函数名字可以是: `fun_prefix+"my_private_function"`.
然后你在程序中调用时使用反射来调用函数。
因为外部不太可能知道你产生 fun_prefix 时的混淆算法,因此外部每次加载你的包时,看到的都是一个随机字符串+“my_private_function”的函数名,因此也没法调用你的函数。
如果你不得不用源代码的方式发布,可以把混淆加密部分做成二进制跟随你的包一起发布。