py加密
#coding=utf-8
'''''
Description:可逆的加密与解密
Environment:python2.5.x
Author:[email protected]
'''
importos
importsys
classCode(object):
'''''可逆的加密与解密'''
def__init__(self,key="[email protected]"):
self.__src_key=key
self.__key=self.__get_strascii(self.__src_key,True)
defencode(self,value):
'''''加密函数,加密后为一串数字'''
return"%d"%(self.__get_strascii(value,True)^self.__key)
defdecode(self,pwd):
'''''解密函数'''
ifself.is_number(pwd):
returnself.__get_strascii((int(pwd))^self.__key,False)
else:
print'requirenumber.'
defreset_key(self,key):
'''''重新设置key'''
self.__src_key=key段亮
self.__key=self.__get_strascii(self.__src_key,True)
#===============================================================================
#内部调用接口
#===============================================================================
def__get_strascii(self,value,bFlag):
ifbFlag:
returnself.__get_str2ascii(value)
else:
returnself.__get_ascii2str(value)
def__get_str2ascii(self,value):
ls=[]
foriinvalue:
ls.append(self.__get_char2ascii(i))
returnlong("".join(ls))
def__get_char2ascii(self,char):
'''''获取单个字符的acsii码值'''
try:
return"%03.d"%ord(char)
except(TypeError,ValueError):
print"keyerror."
exit(1)
def__get_ascii2char(self,ascii):
ifself.is_ascii_range(ascii):
returnchr(ascii)
else:
print"asciierror(%d)"%ascii
exit(1)握衫宽
def__get_ascii2str(self,n_chars):
ls=[]
s="%s"%n_chars
n,p=divmod(len(s),3)
ifp>0:
nRet=int(s[0:p])
ls.append(self.__get_ascii2char(nRet))
pTmp=p
whilepTmp<len(s):
ls.append(self.__get_ascii2char(int(s[pTmp:pTmp+3])))
pTmp+=3
return"".join(ls)
#================================================================================
#工具接口
#================================================================================
defis_number(self,value):
try:
int(value)
returnTrue
except(TypeError,ValueError):
pass
returnFalse
defis_ascii_range(self,n):
return0<=n<256
defis_custom_ascii_range(self,n):
return33<=n<48or58<=n<126
classUsage(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'],
}
defhelp(self,*k):
strHelp="Usage:pwd[-options][args...]whereoptioninclude:"
strHelp+="""
-?-helpprintthishelpmessage
-k<key_str>-p<pwd_str>
-k<key_str>-t<text_str>"""
printstrHelp
defargs(self,argv_ls):
'''''dispatchcommand'''
#printargv_ls
iflen(argv_ls)<=1orlen(argv_ls)>5:
print'Unrecognizedoption'
return
cmd_dic={}
curr_cmd=''
#controlcommand
fori,vinenumerate(argv_ls[1:]):
forjinself._args_dic.items():
#addcommand
ifvinj[1]andj[0]notincmd_dic:
curr_cmd=j[0]
cmd_dic[curr_cmd]=[]
break
else:
#addargv
ifcmd_dic:
cmd_dic[curr_cmd].append(v)
#execcommand
ifcmd_dic:
self.exec_cmd(cmd_dic)
else:
print'Unrecognizedoption'
defexec_cmd(self,cmd_dic):
'''''execcmd'''
iflen(cmd_dic)==2:
if'arg_p'incmd_dicand'arg_k'incmd_dic
andlen(cmd_dic['arg_p'])==1andlen(cmd_dic['arg_k'])==1:
self._clsWork.reset_key(cmd_dic['arg_k'][0])
printself._clsWork.encode(cmd_dic['arg_p'][0])
return
elif'arg_t'incmd_dicand'arg_k'incmd_dic
andlen(cmd_dic['arg_t'])==1andlen(cmd_dic['arg_k'])==1:
self._clsWork.reset_key(cmd_dic['arg_k'][0])
printself._clsWork.decode(cmd_dic['arg_t'][0])
return
self.help()
if__name__=='__main__':
usage=Usage()
usage.args(sys.argv)
㈡ 怎样对 Python 源码加密
代码加密
大概整理了以下几种方法:
编译成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简单加密操作
加密是将一拦冲个明文数据,按照指定的算法,运算得到一个其他的可以隐藏真简弯歼实信息的密文数据,这个过程称为加密;处理的算法称为加密算法;用到的关键数据称为密钥。
解密是按照制定的算法和关键数据,将一个密文数据进行逆向运算得到的正确的明文数据的过程
如:用户账号密码存储,此时任何人都不能查看该用户的明文密码
1.原始数据
2.编码(转换为字节数闹碧据)
3.使用算法加密
4.利用盐值更新密文
5.得到加密后的数据
编码:字符串.encode(编码名称)——>字节数据
解码:字节数据.decode(编码名称)——>字符串数据
==========================================
㈣ python文本加密是什么
python文本加密是Python 提供了诸如 hashlib,base64 等便于使用的加密库,我们可以借助异或操作,实现一个简单的文件加密程序。
通过了解异或操作的性质,加密原理就非常清晰了。
首先将文件转换成二进制数,再生成与该二进制数等长的随机密钥,将二进制数与密钥进行异或操作,得到加密后的二进制数。
将加密后的二进制程序与密钥进行异或操作,就得到原二进制数,最后将原二进制数恢复成文本文件。
相关拓展
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。
加密之所以安全,绝非因不知道加密解密算法方法,而是加密的密钥是绝对的隐藏,流行的RSA和AES加密算法都是完全公开的,一方取得已加密的数据,就算知道加密算法也好,若没有加密的密钥,也不能打开被加密保护的信息。
单单隐蔽加密算法以保护信息,在学界和业界已有相当讨论,一般认为是不够安全的。公开的加密算法是给黑客和加密家长年累月攻击测试,对比隐蔽的加密算法要安全得多。
尽管加密或为了安全目的对信息解码这个概念十分简单,但在这里仍需对其进行解释。数据加密的基本过程包括对称为明文的原来可读信息进行翻译,译成称为密文或密码的代码形式。该过程的逆过程为解密,即将该编码信息转化为其原来的形式的过程。
以上内容参考 网络-加密
㈤ python语言可以加密吗
我们所说的加密方式都是对二进制编码的格式进行加密,对应到python中,则是我们的bytes.
所以当我们在Python中进行加密操作的时候,要确保我们的操作是bytes,否则就会报错.
将字符串和bytes互相转换可以用encode()和decode()方法,如下所示:
注:两位十六进制常常用来显示一个二进制字节.
推荐学习《python教程》。
㈥ py(pyc)源码字节码操作码等方面加壳加压加密的安全系列
py源码安全加密探研系列-基础知识
py源码安全加密探研系列-源码混淆安全加密
py源码安全加密探研系列-cython的.so 安全加密
py源码安全加密探研系列-字节码安全加密
py源码安全加密探研系列-修改解释器(AES安全)
1.c++源码一键混淆
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzAxOTg5NjQ1NA==&action=getalbum&album_id=2447582729564389377#wechat_redirect
㈦ python打包是把.py加密码
python打包是把.py加密。根据查询相关资料信息,用行睁pyinstaller--noconsole--key1-D命令。noconsole:打包时不使用控制台。档差岁庆扒key加密:密码为1。D:所有的依赖库独立存放。F:只打包成一个可执行文件。
㈧ py如何实现对文件的加密
给电脑上的文件加密或者文件夹加密,你可以使用超级加密3000。
超级加密3000采用国际上成熟的加密算法和安全快速肢芹的加密方法,可以有效保障数据安全!
具体操作方法:
1下载安装超级加密3000。
2
然后在需要加密的文件上单击鼠标右键选择加密。
3
在弹出的文件加嫌饥脊密窗口中设置文件加密密码就OK了。
超级加密3000的下载地址你可以在网络上搜索超级加密3000,第一芹渗个就是。
㈨ Python程序加密打包
步骤:
1、使用此文程序编译python源程序为pyd
链接: https://www.jianshu.com/p/4465cf9283b6
2、编写入口py文件,调用pyd模块
注意点:
1、由于pyinstaller不会导入pyd程序依赖包,所以需要将pyd程序依赖包在入口py文件中导入一次,避免打包exe时pyd无法使用
2、打包exe后,路径有所变化,pyd中路径需使用绝对路径
3、pyd文件不要写入口调用,if main等,在入口py文件中导包及调用相关函数
优点:脱离python环境,包依赖
缺点:文件较大
步骤:
1、将入口py文件打包为exe可执行程序,会自动导入pyd文件并进行封装
注意点:
1、打包exe后,cmd下运行程序,看是否有错误输出,按提示解决相应问题即可
㈩ 使用python之MD5进行加密
在许多接口,尤其涉及到金额的地方,都需要用加密算法对数据进行加密。像密码、金额之类的,如果不做加密,被篡改数据,公司的损失会很大。
这里主要说MD5加密(即摘要算法),也就是采用哈希算法,将不定长度的内容转化为32位16进制固定长度的内容。前后台都使用这套算法,再将两者的加密数据比对,如果一致说明数据加密正确,否则数据可能出现篡改。
在pyhon里,可以导入hashlib进行加密,如下
方法一:
执行结果如下图:
方法二:
执行结果如下图: