python映射函数加密 python加密和解密

怎样对 Python 源码加密

代码加密

崇仁网站建设公司成都创新互联,崇仁网站设计制作,有大型网站制作公司丰富经验。已为崇仁1000+提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的崇仁做网站的公司定做!

大概整理了以下几种方法:

编译成pyc文件

使用py2exe将python代码转成window下执行的exe文件

关键代码部分使用c或者c++写,然后在python中调用

用C写一个license,进行license验证

作为一门解释型的语言,加密的难度超级大。下面来简单分析上面的解决方案:

编译成pyc文件几乎跟pyc没有区别,保护力度太低

要是在linux机器上就没法使用,而且这种exe文件也可以被破解的

核心代码部分是计算密集型,用的是pandas,numpy等库,用c重写,简直不可能,工作量太大。

没搞过,不知道………

看来上面的解决方案都是不行的,在stackoverflow上对这个问题也进行了详细的讨论,用我蹩脚的英文来翻译(意译)一下得票率最高的:

“有什么方法来解决这个问题吗?(加密的问题)”没有。任何保护都可以被逆向工程破解。就连DVD机的固件都可以被破解,尽管法律判定其为非法,但是AACS加密密钥还是泄露出来。

因为没有技术的方法可以阻止你的客户看你的代码,你必须用传统的商业方法。

1. 许可证,合约,条款,条件。只要用户签订了这些东西,及时用户可以看见代码,也会有法律约束(不过此建议在中国目前貌似不顶用)

2. 提供巨大的价值。如果你的东西非常好,而且价格很合理,那么用户很难拒绝——没必要浪费时间和金钱去搞逆向工程啥的,因为逆向工程是很费银子的。让你的产品有足够的性价比。

3. 经常性的升级和增加新的功能,使得逆向工程不那么好使。当下一个版本破坏了逆向工程,那么以前的破解就没有意义了。

4. 定制化生产,为不同的客户提供不同的产品。(貌似代价有点高啊)

5. 使用有时间限制的许可证,这会给你带来不好的名声,但是会保证你的软件会停止工作

6. 设计为web service.

代码混淆

既然加密不是一个好方法,那要还是不死心,那就做一个简单的混淆算了,虽然只能”防君子,不防小人“。但是不能就这样把代码暴露出来。

这里推荐一个找了好久的东西: pyobfuscate这个东西在window7中的cmd中貌似总是混淆失败,无奈用了MINGW32,居然搞定了。官方的资料有这样的介绍:

pyobfuscate有几种转化代码的方式,有些可逆,有些不可逆。

移除注释和文档 ( 不可逆)

改变缩进(可逆)

在tokens之间加入空格(一定程度上可逆)

重命名函数,类,和变量(不可逆)

在空白行中加入无效的代码

我没有选择混淆函数名和类名,因为其他地方还要调用呢。下面是我混淆的结果,还挺好看的:

def my_fuction_to_test ( self , start_date , end_date ) :

iiiii11iII1 = self . get_something ( start_date , end_date )

O0o = [ ]

for oO0 in iiiii11iII1 :

if oO0 [ "isOpen" ] == 1 :

IIIi1i1I = { }

OOoOoo00oo = dt . strptime ( oO0 [ 'calendarDate' ] , '%Y-%m-%d' )

IIIi1i1I [ 'day' ] = OOoOoo00oo . strftime ( '%Y%m%d' )

IIIi1i1I [ 'week' ] = oO0 [ 'isWeekEnd' ]

IIIi1i1I [ 'month' ] = oO0 [ 'isMonthEnd' ]

IIIi1i1I [ 'weekday' ] = OOoOoo00oo . weekday ( )

O0o . append ( IIIi1i1I )

iiI11 = pd . DataFrame ( O0o )

return iiI11

python支持哪些加密方法

Python本身应该什么加密算法都没有吧,如果想要加密可以找一些模块

Python简单加密操作

加密是将一个明文数据,按照指定的算法,运算得到一个其他的可以隐藏真实信息的密文数据,这个过程称为加密;处理的算法称为加密算法;用到的关键数据称为密钥。

解密是按照制定的算法和关键数据,将一个密文数据进行逆向运算得到的正确的明文数据的过程

如:用户账号密码存储,此时任何人都不能查看该用户的明文密码

1.原始数据

2.编码(转换为字节数据)

3.使用算法加密

4.利用盐值更新密文

5.得到加密后的数据

编码:字符串.encode(编码名称)——字节数据

解码:字节数据.decode(编码名称)——字符串数据

==========================================

Python 加密程序

#coding=utf-8   

'''''  

Description: 可逆的加密与解密  

Environment: python2.5.x  

Author:idehong@gmail.com  

''' 

import os   

import sys   

class Code(object):   

'''''可逆的加密与解密''' 

def __init__(self, key = "idehong@gmail.com"):   

self.__src_key = key   

self.__key = self.__get_strascii(self.__src_key, True)   

def encode(self, value):   

'''''加密函数, 加密后为一串数字''' 

return  "%d" % (self.__get_strascii(value, True) ^ self.__key)   

def decode(self, pwd):   

'''''解密函数''' 

if self.is_number(pwd):   

return self.__get_strascii( (int(pwd)) ^ self.__key, False )   

else:   

print 'require number.' 

def reset_key(self, key):   

'''''重新设置key''' 

self.__src_key = key   

self.__key = self.__get_strascii(self.__src_key, True)   

#===============================================================================   

#        内部调用接口   

#===============================================================================   

def __get_strascii(self, value, bFlag):   

if bFlag:   

return self.__get_str2ascii(value)    

else:   

return self.__get_ascii2str(value)   

def __get_str2ascii(self, value):   

ls = []   

for i in value:   

ls.append( self.__get_char2ascii( i ) )   

return long("".join(ls))   

def __get_char2ascii(self, char):   

'''''获取单个字符的acsii码值''' 

try:   

return "%03.d" % ord(char)   

except (TypeError, ValueError):   

print "key error." 

exit(1)   

def __get_ascii2char(self, ascii):   

if self.is_ascii_range(ascii):   

return chr(ascii)   

else:   

print "ascii error(%d)" % ascii   

exit(1)          

def __get_ascii2str(self, n_chars):   

ls = []   

s = "%s" % n_chars   

n, p = divmod(len(s), 3)   

if p  0:   

nRet = int(s[0 : p])   

ls.append( self.__get_ascii2char(nRet))   

pTmp = p   

while pTmp  len(s):   

ls.append( self.__get_ascii2char( int(s[pTmp: pTmp + 3])) )

pTmp += 3 

return "".join(ls)   

#================================================================================   

#        工具接口   

#================================================================================   

def is_number(self, value):   

try:   

int(value)   

return True 

except (TypeError, ValueError):   

pass 

return False 

def is_ascii_range(self, n):   

return 0 = n  256 

def is_custom_ascii_range(self, n):   

return 33 = n 48 or 58 = n  126         

class Usage(object):   

'''''  

命令行参数读取与解析  

''' 

def __init__(self):   

self._clsWork = Code()   

self._args_dic = {'arg_help' : ['-?', '-help'],    

'arg_p' : ['-p', '-pwd'],   

'arg_t' : ['-t', '-text'],   

'arg_k' : ['-k', '-key'],   

}           

def help(self, *k):   

strHelp = "Usage: pwd [-options] [args...] where option include:" 

strHelp += """  

-? -help                    print this help message  

-k key_str -p pwd_str  

-k key_str -t text_str""" 

print strHelp     

def args(self, argv_ls):    

'''''dispatch command'''    

#        print argv_ls   

if len(argv_ls) = 1 or len(argv_ls)  5:   

print 'Unrecognized option' 

return 

cmd_dic = {}   

curr_cmd = ''  

# control command   

for i, v in enumerate(argv_ls[1:]):   

for j in self._args_dic.items():   

# add command   

if v in j[1] and j[0] not in cmd_dic:   

curr_cmd = j[0]   

cmd_dic[curr_cmd] = []   

break 

else:   

# add argv   

if cmd_dic:   

cmd_dic[curr_cmd].append(v)               

# exec command   

if cmd_dic:   

self.exec_cmd(cmd_dic)   

else:   

print 'Unrecognized option' 

def exec_cmd(self, cmd_dic):     

'''''exec cmd'''        

if len(cmd_dic) == 2:   

if 'arg_p' in cmd_dic and 'arg_k' in cmd_dic\   

and len(cmd_dic['arg_p']) == 1 and len(cmd_dic['arg_k']) == 1:   

self._clsWork.reset_key(cmd_dic['arg_k'][0])   

print self._clsWork.encode(cmd_dic['arg_p'][0])   

return 

elif 'arg_t' in cmd_dic and 'arg_k' in cmd_dic\   

and len(cmd_dic['arg_t']) == 1 and len(cmd_dic['arg_k']) == 1:   

self._clsWork.reset_key(cmd_dic['arg_k'][0])   

print self._clsWork.decode(cmd_dic['arg_t'][0])   

return 

self.help()   

if __name__ == '__main__':   

usage = Usage()   

usage.args(sys.argv)

用Python语言从文件夹中提取文件进行凯撒加密?

import string

def kaisa(s, k): #定义函数 接受一个字符串s 和 一个偏移量k

lower = string.ascii_lowercase #小写字母

upper = string.ascii_uppercase #大写字母

before = string.ascii_letters #无偏移的字母顺序 小写+大写

after = lower[k:] + lower[:k] + upper[k:] + upper[:k] #偏移后的字母顺序 还是小写+大写

#分别把小写字母和大写字母偏移后再加到一起

table = ''.maketrans(before, after) #创建映射表

return s.translate(table) #对s进行偏移 即加密

s = input('请输入一个字符串:')

k = int(input('请输入一个整数密钥:'))

print(kaisa(s, k))

调用此函数


当前文章:python映射函数加密 python加密和解密
分享网址:http://scjbc.cn/article/hgpigh.html

其他资讯