步驟:
創(chuàng)新互聯(lián)建站成立于2013年,我們提供高端網(wǎng)站建設公司、成都網(wǎng)站制作、成都網(wǎng)站設計、網(wǎng)站定制、網(wǎng)絡營銷推廣、小程序開發(fā)、微信公眾號開發(fā)、成都網(wǎng)站推廣服務,提供專業(yè)營銷思路、內(nèi)容策劃、視覺設計、程序開發(fā)來完成項目落地,為石雕企業(yè)提供源源不斷的流量和訂單咨詢。
1、使用此文程序編譯python源程序為pyd
鏈接:
2、編寫入口py文件,調(diào)用pyd模塊
注意點:
1、由于pyinstaller不會導入pyd程序依賴包,所以需要將pyd程序依賴包在入口py文件中導入一次,避免打包exe時pyd無法使用
2、打包exe后,路徑有所變化,pyd中路徑需使用絕對路徑
3、pyd文件不要寫入口調(diào)用,if main等,在入口py文件中導包及調(diào)用相關函數(shù)
優(yōu)點:脫離python環(huán)境,包依賴
缺點:文件較大
步驟:
1、將入口py文件打包為exe可執(zhí)行程序,會自動導入pyd文件并進行封裝
注意點:
1、打包exe后,cmd下運行程序,看是否有錯誤輸出,按提示解決相應問題即可
#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):???
'''''加密函數(shù),?加密后為一串數(shù)字'''?
return??"%d"?%?(self.__get_strascii(value,?True)?^?self.__key)???
def?decode(self,?pwd):???
'''''解密函數(shù)'''?
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)???
#===============================================================================???
#????????內(nèi)部調(diào)用接口???
#===============================================================================???
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):???
'''''??
命令行參數(shù)讀取與解析??
'''?
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)
RSA加密是一種非對稱加密,通常使用公鑰加密,私鑰解密。
生成文件如下圖:
可以將生成的公鑰、私鑰粘貼復制存儲起來,以便使用:
在使用中, 通常會先對數(shù)據(jù)進行bas64加密, 再對加密后的內(nèi)容使用rsa加密, 最后對rsa解密后的內(nèi)容進行bas64解密.
加密是將一個明文數(shù)據(jù),按照指定的算法,運算得到一個其他的可以隱藏真實信息的密文數(shù)據(jù),這個過程稱為加密;處理的算法稱為加密算法;用到的關鍵數(shù)據(jù)稱為密鑰。
解密是按照制定的算法和關鍵數(shù)據(jù),將一個密文數(shù)據(jù)進行逆向運算得到的正確的明文數(shù)據(jù)的過程
如:用戶賬號密碼存儲,此時任何人都不能查看該用戶的明文密碼
1.原始數(shù)據(jù)
2.編碼(轉換為字節(jié)數(shù)據(jù))
3.使用算法加密
4.利用鹽值更新密文
5.得到加密后的數(shù)據(jù)
編碼:字符串.encode(編碼名稱)——字節(jié)數(shù)據(jù)
解碼:字節(jié)數(shù)據(jù).decode(編碼名稱)——字符串數(shù)據(jù)
==========================================
在許多接口,尤其涉及到金額的地方,都需要用加密算法對數(shù)據(jù)進行加密。像密碼、金額之類的,如果不做加密,被篡改數(shù)據(jù),公司的損失會很大。
這里主要說MD5加密(即摘要算法),也就是采用哈希算法,將不定長度的內(nèi)容轉化為32位16進制固定長度的內(nèi)容。前后臺都使用這套算法,再將兩者的加密數(shù)據(jù)比對,如果一致說明數(shù)據(jù)加密正確,否則數(shù)據(jù)可能出現(xiàn)篡改。
在pyhon里,可以導入hashlib進行加密,如下
方法一:
執(zhí)行結果如下圖:
方法二:
執(zhí)行結果如下圖: