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)

十一. 执行效果

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