python“加密和解密”之“字符串轉二進制” 和 “二進制轉字符串”

def encode(s):

    #實現字符串轉換成二進制表示
    #字符串 -> ASCII碼數值 -> 二進制表示
    ###str_bin = ' '.join([bin(ord(c)).replace('0b', '') for c in s]) 該代碼可轉換成裁開的for 循環,如下四行代碼:

    tmp = []
    for c in s:
        tmp.append(bin(ord(c)).replace('0b', ''))

    str_bin = ' '.join(tmp)
    

    print(str_bin)
def decode(s):
# 實現二進制表示轉換成字符串表示
# 二進制表示 -> ASCII碼數值 -> 字符串表示
    bin_str = ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])

    return bin_str

 

一:python中函數:string.join()

Python中有join()和os.path.join()兩個函數,具體作用如下:
join(): 連接字符串數組。將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串
os.path.join(): 將多個路徑組合後返回

 

二、join()函數說明
1、join()函數

語法: 'sep'.join(seq)

參數說明
sep:分隔符。可以爲空
seq:要連接的元素序列、字符串、元組、字典
上面的語法即:以sep作爲分隔符,將seq所有的元素合併成一個新的字符串

返回值:返回一個以分隔符sep連接各個元素後生成的字符串

2、os.path.join()函數

語法: os.path.join(path1[,path2[,......]])

返回值:將多個路徑組合後返回

注:第一個絕對路徑之前的參數將被忽略

 

三 join()函數程序例子

#對序列進行操作(分別使用' '與':'作爲分隔符)
>>> seq1 = ['hello','good','boy','doiido']
>>> print ' '.join(seq1)
hello good boy doiido
>>> print ':'.join(seq1)
hello:good:boy:doiido
  
#對字符串進行操作
>>> seq2 = "hello good boy doiido"
>>> print ':'.join(seq2)
h:e:l:l:o: :g:o:o:d: :b:o:y: :d:o:i:i:d:o
  
#對元組進行操作
>>> seq3 = ('hello','good','boy','doiido')
>>> print ':'.join(seq3)
hello:good:boy:doiido
  
#對字典進行操作
>>> seq4 = {'hello':1,'good':2,'boy':3,'doiido':4}
>>> print ':'.join(seq4)
boy:good:doiido:hello
 
#合併目錄
>>> import os
>>> os.path.join('/hello/','good/boy/','doiido')
'/hello/good/boy/doiido'

 

四. Python bin() 函數

bin() 返回一個整數 int 或者長整數 long int 的二進制表示

>>>bin(10)

'0b1010'

>>> bin(20)

'0b10100'

 

五. Python ord() 函數

ord() 函數是 chr() 函數(對於8位的ASCII字符串)unichr() 函數(對於Unicode對象)的配對函數,它以一個字符(長度爲1的字符串)作爲參數,返回對應的 ASCII 數值,或者 Unicode 數值,如果所給的 Unicode 字符超出了你的 Python 定義範圍,則會引發一個 TypeError 的異常。

ord()函數的返回值是對應的十進制整數。

>>>ord('a')

97

>>> ord('b')

98

>>> ord('c')

99

六 加密循環體 for c in s

' '.join([bin(ord(c)).replace('0b', '') for c in s])中[bin(ord(c)).replace('0b', '') for c in s] 等價於 

tmp = []

for  in  s :

    tmp.append(bin(ord(c)).replace('0b', ''))

 

七. Python chr() 函數

chr() 用一個範圍在 range(256)內的(就是0~255)整數作參數,返回一個對應的字符。

返回值是當前整數對應的 ASCII 字符。

例如 

>>>print chr(0x30), chr(0x31), chr(0x61)   # 十六進制
0 1 a
>>> print chr(48), chr(49), chr(97)         # 十進制
0 1 a

八. Python split() 函數

Python split() 通過指定分隔符對字符串進行切片,如果參數 num 有指定值,則分隔 num+1 個子字符串

split() 方法語法:

str.split(str="", num=string.count(str)).
  • str -- 分隔符,默認爲所有的空字符,包括空格、換行(\n)、製表符(\t)等。
  • num -- 分割次數。默認爲 -1, 即分隔所有。
  • 返回分割後的字符串列表

實例:

#實例1:
str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( );       # 以空格爲分隔符,包含 \n
print str.split(' ', 1 ); # 以空格爲分隔符,分隔成兩個

# 分割結果爲:
#['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
#['Line1-abcdef', '\nLine2-abc \nLine4-abcd']

#實例2
txt = "Google#Runoob#Taobao#Facebook"
 
# 第二個參數爲 1,返回兩個參數列表
x = txt.split("#", 1)
 
print x

# 分割結果爲:
#['Google', 'Runoob#Taobao#Facebook']


九. Python int() 函數

int() 函數用於將一個字符串或數字轉換爲整型。

以下是 int() 方法的語法:

int(x, base=10)
  • x -- 字符串或數字。
  • base -- 進制數,默認十進制。
  • 返回整數型數據

實例:

>>>int()               # 不傳入參數時,得到結果0
0
>>> int(3)
3
>>> int(3.6)
3
>>> int('12',16)        # 如果是帶參數base的話,12要以字符串的形式進行輸入,12 爲 16進制
18
>>> int('0xa',16)  
10  
>>> int('10',8)  
8

十. 解密循環體解析

bin_str = ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])

等價於:

    bin_tmp = []
    str_tmp = []

    for b in s.split(' '):
        bin_tmp.append(int(b, 2))

    for i in bin_tmp:
        str_tmp.append(chr(i))

    bin_str = ''.join(str_tmp)

十一. 執行效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章