from Crypto.Cipher import AES
import os
import base64
import socket
import subprocess
BLOCK_SIZE = 16
PADDING='#'
def _pad(data, pad_with=PADDING):
return data + (BLOCK_SIZE - len(data) % BLOCK_SIZE) * PADDING
我理解角色"#"用于填充块但我无法理解" *"的含义,通常用于乘法。
答案 0 :(得分:4)
在Python中,您可以将一个字符串乘以一个整数,以多次重复该字符串。 E.g。
'a' * 4
产生
'aaaa'
任何类都可以通过implementing specially-named methods重载*
之类的运算符。
答案 1 :(得分:1)
* PADDING
正是指(次 PADDING
)。
* PADDING
将(BLOCK_SIZE - len(data) % BLOCK_SIZE)
次#
添加到data
的末尾。
它会根据特定数据的大小和BLOCK_SIZE
计算特定数据所需的填充的数量,并添加额外的#
PADDING
。
计算是BLOCK_SIZE
减去传递给函数的data
的长度,所有这些都以BLOCK_SIZE
为模。
示例:
>>> BLOCK_SIZE = 20
>>> data = 'this is my data'
>>> PADDING = '#'
>>> data + (BLOCK_SIZE - len(data) % BLOCK_SIZE) * PADDING
'this is my data#####'
执行的计算是:
data + (20 - 15%20)*PADDING = data + (20 - 15)*PADDING = data + 5*PADDING = data + '#####'
答案 2 :(得分:1)
str类型获取*运算符:
$ http get localhost:6666/bar
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 16
Content-Type: text/html; charset=utf-8
Date: Thu, 17 Mar 2016 09:51:19 GMT
ETag: W/"10-cReU2J3jD/VaD5KVhqwLow"
X-Powered-By: Express
Custom 404 page.
因为'#' * 10 = '##########'
方法在str类定义中定义:
__mul__()
答案 3 :(得分:-1)
>>> a= '#'
>>> a* 12
'############'
>>>