1. 程式人生 > >[python]python學習筆記(七)——加密

[python]python學習筆記(七)——加密

1,python對字串加密常見的方法:

<pre code_snippet_id="340592" snippet_file_name="blog_20140512_1_2282504" name="code" class="python">1. 最簡單的方法是用base64:     
          
import base64     
          
s1 = base64.encodestring('hello world')     
s2 = base64.decodestring(s1)     
print s1,s2     
          
# aGVsbG8gd29ybGQ=n     
# hello world     
          
注: 這是最簡單的方法了,但是不夠保險,因為如果別人拿到你的密文,也可以自己解密來得到明文;不過可以把密文字串進行處理,如字母轉換成數字或是特殊字元等,自己解密的時候在替換回去在進行base64.decodestring,這樣要安全很多。     
          
          
          
          
2. 第二種方法是使用win32com.client     
          
import win32com.client     
def encrypt(key,content): # key:金鑰,content:明文     
    EncryptedData = win32com.client.Dispatch('CAPICOM.EncryptedData')     
    EncryptedData.Algorithm.KeyLength = 5
    EncryptedData.Algorithm.Name = 2
    EncryptedData.SetSecret(key)     
    EncryptedData.Content = content     
    return EncryptedData.Encrypt()     
          
def decrypt(key,content): # key:金鑰,content:密文     
    EncryptedData = win32com.client.Dispatch('CAPICOM.EncryptedData')     
    EncryptedData.Algorithm.KeyLength = 5
    EncryptedData.Algorithm.Name = 2
    EncryptedData.SetSecret(key)     
    EncryptedData.Decrypt(content)     
    str = EncryptedData.Content     
    return str
          
s1 = encrypt('lovebread', 'hello world')     
s2 = decrypt('lovebread', s1)     
print s1,s2     
          
# MGEGCSsGAQQBgjdYA6BUMFIGCisGAQQBgjdYAwGgRDBCAgMCAAECAmYBAgFABAgq     
# GpllWj9cswQQh/fnBUZ6ijwKDTH9DLZmBgQYmfaZ3VFyS/lq391oDtjlcRFGnXpx     
# lG7o     
# hello world     
           
          
注:  這種方法也很方便,而且可以設定自己的金鑰,比第一種方法更加安全,如果對安全級別要求不太高的話這種方法是加密解密的首選之策!     
          
           
          
3. 還有就是自己寫加密解密演算法,比如:     
          
def encrypt(key, s):     
    b = bytearray(str(s).encode("gbk"))     
    n = len(b) # 求出 b 的位元組數     
    c = bytearray(n*2)     
    j = 0
    for i in range(0, n):     
        b1 = b[i]     
        b2 = b1 ^ key # b1 = b2^ key     
        c1 = b2 % 16
        c2 = b2 // 16 # b2 = c2*16 + c1     
        c1 = c1 + 65
        c2 = c2 + 65 # c1,c2都是0~15之間的數,加上65就變成了A-P 的字元的編碼     
        c[j] = c1     
        c[j+1] = c2     
        j = j+2
    return c.decode("gbk")     
          
def decrypt(key, s):     
    c = bytearray(str(s).encode("gbk"))     
    n = len(c) # 計算 b 的位元組數     
    if n % 2 != 0 :     
        return ""     
    n = n // 2
    b = bytearray(n)     
    j = 0
    for i in range(0, n):     
        c1 = c[j]     
        c2 = c[j+1]     
        j = j+2
        c1 = c1 - 65
        c2 = c2 - 65
        b2 = c2*16 + c1     
        b1 = b2^ key     
        b[i]= b1     
    try:     
        return b.decode("gbk")     
    except:     
        return "failed"
          
key = 15
s1 = encrypt(key, 'hello world')     
s2 = decrypt(key, s1)     
print s1,'n',s2      
          
# HGKGDGDGAGPCIHAGNHDGLG     
# hello world     
          
          
注: 這是網上抄來的一個簡單的例子,大家可以自定義自己演算法進行加密解密;還有許許多多複雜的加密演算法,大家可以自行查閱密碼學的相關演算法。     
          
4.對於python來說,也可以把python原始碼檔案編譯成pyc二進位制格式的檔案,這樣別人就看不到你的原始碼,也算是一種加密方法吧,方法如下:     
執行命令python -m py_compile create_slave.py 可以直接生成一個create_slave.pyc檔案,然後可以用create_slave.pyc來替換create_slave.py作為指令碼來執行。


相關推薦

[python]python學習筆記——加密

1,python對字串加密常見的方法: <pre code_snippet_id="340592" snippet_file_name="blog_20140512_1_2282504" name="code" class="python">1. 最簡單的方法

Python爬蟲學習筆記——智高考數據爬取

pid items bubuko strong eai res har href name 介紹 智高考是一個高考誌願網站,也是基於Ajax的。高中的時候我在wyz大神的幫忙下,嘗試過爬取信息來為填誌願做準備。但是當時沒有系統學習過爬蟲,幾乎都是靠大神帶飛,因此今天再次嘗試

Python入門學習筆記 - 類

學習內容 如何編寫類並建立其例項,如何使用屬性在類中儲存資訊,以及如何編寫方法,以讓類具備所需的行為。如何編寫方法 __init__() ,以便根據類建立包含所需屬性的例項。 如何修改例項的屬性 —— 包括直接修改以及通過方法進行修改。 使用 繼承 簡化相關類的建立工作;將一個類的例項用作另一

python學習筆記函數

限制 指向 什麽 問題 www. img 值傳遞 在線的 comment 原鏈接:http://www.cnblogs.com/vamei/archive/2012/06/01/2529500.html#!comments 函數學習遇到了問題 1 #!/usr/bin/

Python學習筆記

cookies 常用方法 .com 人的 https 初始化 面向 cache decode 用python代碼調用接口,使用urllib模塊,但是該模塊數據必須都是2進制的,比較麻煩 from urllib.request import urlopen from url

python基礎教程第三版)學習筆記

第七章 再談抽象 自定義`類和物件 7.1 物件魔法 多型:可對不同型別的物件執行相同的操作,而這些操作就像“被施了魔法”一樣能夠正常執行。 封裝:對外部隱藏有關物件工作原理的細節。 繼承:可基於通用類創建出專用類。 7.1.1 多型 大致意味著即便你不知道變數指向的是哪種物件,也能夠對其執行操作,

Python學習筆記運算子

運算子 描述 == 檢查兩個運算元的值是否 相等,如果是,則條件成立,返回True != 檢查兩個運算元的值是否 不相等,如果是,則條件成立,返回True

Python學習筆記運算符

變量 操作數 python 註意 算術 大於 col 使用 group 運算符 描述 == 檢查兩個操作數的值是否 相等,如果是,則條件成立,返回True != 檢查兩個操作數的值是否 不相等,如果是,則條件成立,返回True > 檢查左操作數的值

Python中的函式---基礎學習筆記

一、函式的定義與呼叫 1、函式的定義格式: def函式名(): 程式碼 2、呼叫函式:定義了函式之後,就相當於有了一個具有某更能的程式碼,想要讓這些程式碼能夠執行,需要呼叫它 呼叫函式很簡單的,通過

Python自動化學習筆記——常用內置函數、os.walk了解、md5加密、連接數據庫

條件 讀取 字符 select none del 管理員 mktime rom 1.常用內置函數 print(max([1,2,3,4])) #獲取最大值print(sum([1,2,3,4])) #求和print(math.pi) #圓周率的值print(chr(6

Python學習筆記—— List.sort 與二進位制搜尋bisect

程式碼及內容源自《Fluent Python》——Luciano Ramalho 著 List.sort方法會直接進行排序操作,過程中既不會複製原list,也不會生成新的list物件。 與之相反,sorted()函式則會生成並返回一個新的list。

Python Click 學習筆記

col 輸出 小工具 方法 chm 好的 put name 回調 原文鏈接:Python Click 學習筆記 Click 是 Flask 的團隊 pallets 開發的優秀開源項目,它為命令行工具的開發封裝了大量方法,使開發者只需要專註於功能實現。恰好我最近在開發的一個小

python學習筆記0之循環的使用1

循環條件 back 技術分享 -s 這就是 相同 直接 用法 深入   這是我第一次正式的開始學習這門語言,雖然之前也多多少少接觸過一點,但是一直沒有深入的學習和研究過,所以我打算從今天起準備開始由淺入深的學習下這門語言。   python這門語言和其他語言相比最大的特點就

《可愛的Python》讀書筆記

configparser ConfigParser 沒有最好,只有更合理!使用默認的列表打印格式來存儲和匯報實在不咋的,想著修改修改,於是:# -*- coding: utf-8 -*- import os def cdWalker(cdrom, cdcfile): export = &q

Python爬蟲學習筆記——urllib庫的使用

scheme param https ade 網站 dmgr nor 分享圖片 out 前言 我買了崔慶才的《Python3網絡爬蟲開發實戰》,趁著短學期,準備系統地學習下網絡爬蟲。在學習這本書的同時,通過博客摘錄並總結知識點,同時也督促自己每日學習。本書第一章是開發環境的

Python爬蟲學習筆記——requests庫的使用

pip 安裝 .text rep 瀏覽器 ror clas ade 學習筆記 準備工作 requests庫不是python自帶的庫,可以用pip安裝。在使用時導入requests即可。 基本用法 GET請求 r = requests.get(url) print(r.tex

Python爬蟲學習筆記——正則表達式

斜杠 這一 seh 爬蟲 class 學習 常用方法 部分 介紹 介紹 正則表達式是一種處理字符串的強大工具,能實現字符串的檢索、替換、匹配驗證等。在爬蟲中,正則表達式主要用於從HTML裏提取所需要的信息 常用的匹配規則 模式 描述 \w 匹配字母、數字及下劃

Python自動化學習筆記——介面測試基礎

1.1 介面基礎知識  1.1.1    Get&post請求 GET和POST請求:       GET提交的資料會放在URL之後,以?分割URL和傳輸資料,引數之間以&相連,如EditPosts.aspx?name

python入門學習筆記——切片、元組

4.操作列表 4.1遍歷整個列表:for name = ['x','y','z'] for x in name: (in後面是可迭代物件‚不要忘記:ƒ迴圈內容要縮排,縮排是靈魂)          &

python入門學習筆記——列表

3.列表 3.1使用列表的值 name = ['dad','sss','ff'] print(name) print(name[0]) print(name[-1].upper()) 3.2修改列表值 name[-1] = 'aa' print(name) 3