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進行加密,如下
方法一:
執行結果如下圖:
方法二:
執行結果如下圖: