Hướng dẫn python crypto util padding - python crypto sử dụng đệm

Pycryptodome

Các mô -đun hữu ích mà don lồng thuộc về bất kỳ gói nào khác.

Crypto.Util.Padding Mô -đun

Mô -đun này cung cấp hỗ trợ tối thiểu để thêm và loại bỏ đệm tiêu chuẩn khỏi dữ liệu. Thí dụ:

>>> from Crypto.Util.Padding import pad, unpad
>>> from Crypto.Cipher import AES
>>> from Crypto.Random import get_random_bytes
>>>
>>> data = b'Unaligned'   # 9 bytes
>>> key = get_random_bytes(32)
>>> iv = get_random_bytes(16)
>>>
>>> cipher1 = AES.new(key, AES.MODE_CBC, iv)
>>> ct = cipher1.encrypt(pad(data, 16))
>>>
>>> cipher2 = AES.new(key, AES.MODE_CBC, iv)
>>> pt = unpad(cipher2.decrypt(ct), 16)
>>> assert(data == pt)

________ 9 ________ 10 (data_to_pad, block_size, style = 'pkcs7') ¶(data_to_pad, block_size, style='pkcs7')

Áp dụng đệm tiêu chuẩn.

Parameters:
  • data_to_pad (chuỗi byte) - dữ liệu cần được đệm. (byte string) – The data that needs to be padded.
  • block_size (số nguyên) - ranh giới khối để sử dụng để đệm. Độ dài đầu ra được đảm bảo là bội số của
    >>> from Crypto.Util.RFC1751 import english_to_key
    >>> english_to_key('RAM LOIS GOAD CREW CARE HIT')
    b'66666666'
    
    1.
    (integer) – The block boundary to use for padding. The output length is guaranteed to be a multiple of
    >>> from Crypto.Util.RFC1751 import english_to_key
    >>> english_to_key('RAM LOIS GOAD CREW CARE HIT')
    b'66666666'
    
    1.
  • Kiểu (chuỗi) - Thuật toán đệm. Nó có thể là ‘pkcs7, (mặc định),‘ iso7816, hoặc ‘x923. (string) – Padding algorithm. It can be ‘pkcs7’ (default), ‘iso7816’ or ‘x923’.
Returns:

Dữ liệu gốc với phần đệm thích hợp được thêm vào cuối.

Loại trở lại:

Chuỗi byte

________ 9 ________ 13 (padded_data, block_size, style = 'pkcs7') ¶(padded_data, block_size, style='pkcs7')

Loại bỏ đệm tiêu chuẩn.

Parameters:
  • padded_data (chuỗi byte) - một phần dữ liệu với phần đệm cần phải bị tước. (byte string) – A piece of data with padding that needs to be stripped.
  • block_size (số nguyên) - ranh giới khối để sử dụng để đệm. Độ dài đầu vào phải là bội số của
    >>> from Crypto.Util.RFC1751 import english_to_key
    >>> english_to_key('RAM LOIS GOAD CREW CARE HIT')
    b'66666666'
    
    1.
    (integer) – The block boundary to use for padding. The input length must be a multiple of
    >>> from Crypto.Util.RFC1751 import english_to_key
    >>> english_to_key('RAM LOIS GOAD CREW CARE HIT')
    b'66666666'
    
    1.
  • Kiểu (chuỗi) - Thuật toán đệm. Nó có thể là ‘pkcs7, (mặc định),‘ iso7816, hoặc ‘x923. (string) – Padding algorithm. It can be ‘pkcs7’ (default), ‘iso7816’ or ‘x923’.
Returns:

Dữ liệu gốc với phần đệm thích hợp được thêm vào cuối.

Loại trở lại:

Chuỗi byte

Raises:

________ 9 ________ 13 (padded_data, block_size, style = 'pkcs7') ¶

Loại bỏ đệm tiêu chuẩn.

padded_data (chuỗi byte) - một phần dữ liệu với phần đệm cần phải bị tước.(s)

block_size (số nguyên) - ranh giới khối để sử dụng để đệm. Độ dài đầu vào phải là bội số của

>>> from Crypto.Util.RFC1751 import english_to_key
>>> english_to_key('RAM LOIS GOAD CREW CARE HIT')
b'66666666'
1.

Example:

>>> from Crypto.Util.RFC1751 import english_to_key
>>> english_to_key('RAM LOIS GOAD CREW CARE HIT')
b'66666666'

Parameters:Dữ liệu mà không cần đệm. (string) – the string with the words separated by whitespace; the number of words must be a multiple of 6.
Returns:
>>> from Crypto.Util.RFC1751 import english_to_key
>>> english_to_key('RAM LOIS GOAD CREW CARE HIT')
b'66666666'
5 - Nếu đệm không chính xác.
>>> from Crypto.Util.RFC1751 import english_to_key
>>> english_to_key('RAM LOIS GOAD CREW CARE HIT')
b'66666666'
6 Mô -đun(key)

________ 17 ________ 18 (s)

Example:

>>> from Crypto.Util.RFC1751 import key_to_english
>>> key_to_english(b'66666666')
'RAM LOIS GOAD CREW CARE HIT'

Parameters:Chuyển đổi một chuỗi thành một khóa tương ứng. (byte string) – The key to convert. Its length must be a multiple of 8.
Returns:S (chuỗi) - Chuỗi có các từ được phân tách bằng khoảng trắng; Số lượng từ phải là bội số của 6.

Một chuỗi byte.

________ 17 ________ 20 (khóa)

Chuyển đổi một khóa tùy ý thành một chuỗi chứa các từ tiếng Anh.(term1, term2, output=None)

phím (chuỗi byte) - khóa để chuyển đổi. Chiều dài của nó phải là bội số của 8.

Parameters:
  • Một chuỗi các từ tiếng Anh. (bytes/bytearray/memoryview) – The first byte string to XOR.
  • >>> from Crypto.Util.RFC1751 import key_to_english
    >>> key_to_english(b'66666666')
    'RAM LOIS GOAD CREW CARE HIT'
    
    1 Mô -đun
    (bytes/bytearray/memoryview) – The second byte string to XOR.
  • Nhanh xor cho chuỗi byte. (bytearray/memoryview) – The location where the result will be written to. It must have the same length as
    >>> from Crypto.Util.RFC1751 import key_to_english
    >>> key_to_english(b'66666666')
    'RAM LOIS GOAD CREW CARE HIT'
    
    4 and
    >>> from Crypto.Util.RFC1751 import key_to_english
    >>> key_to_english(b'66666666')
    'RAM LOIS GOAD CREW CARE HIT'
    
    5. If
    >>> from Crypto.Util.RFC1751 import key_to_english
    >>> key_to_english(b'66666666')
    'RAM LOIS GOAD CREW CARE HIT'
    
    6, the result is returned.
Return:

________ 22 ________ 23 (term1, term2, output = none) ¶

Từ hai chuỗi byte có chiều dài bằng nhau, tạo một chuỗi thứ ba là x có byte của hai.

term1 (byte/bytearray/memoryView) - chuỗi byte đầu tiên cho XOR.

term2 (byte/bytearray/memoryView) - chuỗi byte thứ hai cho XOR.(term, c, output=None)

đầu ra (bytearray/morechview) - vị trí mà kết quả sẽ được ghi vào. Nó phải có cùng chiều dài với

>>> from Crypto.Util.RFC1751 import key_to_english
>>> key_to_english(b'66666666')
'RAM LOIS GOAD CREW CARE HIT'
4 và
>>> from Crypto.Util.RFC1751 import key_to_english
>>> key_to_english(b'66666666')
'RAM LOIS GOAD CREW CARE HIT'
5. Nếu
>>> from Crypto.Util.RFC1751 import key_to_english
>>> key_to_english(b'66666666')
'RAM LOIS GOAD CREW CARE HIT'
6, kết quả được trả về.

Parameters:
  • Nếu
    >>> from Crypto.Util.RFC1751 import key_to_english
    >>> key_to_english(b'66666666')
    'RAM LOIS GOAD CREW CARE HIT'
    
    7 là
    >>> from Crypto.Util.RFC1751 import key_to_english
    >>> key_to_english(b'66666666')
    'RAM LOIS GOAD CREW CARE HIT'
    
    6, một chuỗi byte mới có kết quả. Nếu không
    >>> from Crypto.Util.RFC1751 import key_to_english
    >>> key_to_english(b'66666666')
    'RAM LOIS GOAD CREW CARE HIT'
    
    6.
    (bytes/bytearray/memoryview) – The byte string to XOR.
  • Ghi chú (int) – Every byte in the string will be XOR-ed with this value. It must be between 0 and 255 (included).
  • >>> from Crypto.Util.RFC1751 import key_to_english
    >>> key_to_english(b'66666666')
    'RAM LOIS GOAD CREW CARE HIT'
    
    4 và
    >>> from Crypto.Util.RFC1751 import key_to_english
    >>> key_to_english(b'66666666')
    'RAM LOIS GOAD CREW CARE HIT'
    
    5 phải có cùng chiều dài.
    (None or bytearray/memoryview) – The location where the result will be written to. It must have the same length as
    from Crypto.Cipher import AES
    from Crypto.Util import Counter
    from Crypto import Random
    
    nonce = Random.get_random_bytes(4)
    ctr = Counter.new(64, prefix=nonce, suffix=b'ABCD', little_endian=True, initial_value=10)
    key = b'AES-128 symm key'
    plaintext = b'X'*1000000
    cipher = AES.new(key, AES.MODE_CTR, counter=ctr)
    ciphertext = cipher.encrypt(plaintext)
    
    4. If
    >>> from Crypto.Util.RFC1751 import key_to_english
    >>> key_to_english(b'66666666')
    'RAM LOIS GOAD CREW CARE HIT'
    
    6, the result is returned.
Returns:

________ 22 ________ 33 (thuật ngữ, c, output = none) ¶

Từ chuỗi byte, tạo một thứ hai có độ dài bằng nhau trong đó mỗi byte là XOR-RED với cùng một giá trị.

Thuật ngữ (byte/bytearray/memoryView) - Chuỗi byte thành XOR.

C (int)-Mỗi byte trong chuỗi sẽ được XOR-ED với giá trị này. Nó phải nằm trong khoảng từ 0 đến 255 (bao gồm). is a mode of operation for block ciphers.

đầu ra (không có hoặc bytearray/memoryView) - vị trí mà kết quả sẽ được ghi vào. Nó phải có cùng chiều dài với

from Crypto.Cipher import AES
from Crypto.Util import Counter
from Crypto import Random

nonce = Random.get_random_bytes(4)
ctr = Counter.new(64, prefix=nonce, suffix=b'ABCD', little_endian=True, initial_value=10)
key = b'AES-128 symm key'
plaintext = b'X'*1000000
cipher = AES.new(key, AES.MODE_CTR, counter=ctr)
ciphertext = cipher.encrypt(plaintext)
4. Nếu
>>> from Crypto.Util.RFC1751 import key_to_english
>>> key_to_english(b'66666666')
'RAM LOIS GOAD CREW CARE HIT'
6, kết quả được trả về.

Nếu

>>> from Crypto.Util.RFC1751 import key_to_english
>>> key_to_english(b'66666666')
'RAM LOIS GOAD CREW CARE HIT'
7 là
>>> from Crypto.Util.RFC1751 import key_to_english
>>> key_to_english(b'66666666')
'RAM LOIS GOAD CREW CARE HIT'
6, chuỗi
from Crypto.Cipher import AES
from Crypto.Util import Counter
from Crypto import Random

nonce = Random.get_random_bytes(4)
ctr = Counter.new(64, prefix=nonce, suffix=b'ABCD', little_endian=True, initial_value=10)
key = b'AES-128 symm key'
plaintext = b'X'*1000000
cipher = AES.new(key, AES.MODE_CTR, counter=ctr)
ciphertext = cipher.encrypt(plaintext)
8 mới có kết quả. Nếu không
>>> from Crypto.Util.RFC1751 import key_to_english
>>> key_to_english(b'66666666')
'RAM LOIS GOAD CREW CARE HIT'
6.

>>> int.from_bytes(s, 'big')
0 Mô -đun

  • Chức năng truy cập phong phú hơn cho chế độ mật mã CTR.
  • CTR là một chế độ hoạt động cho các mật mã khối.

Bản rõ được chia thành các khối và mỗi khối được XOR-ED với một phím kẽ để có được bản mã. KeyStream được sản xuất bằng cách mã hóa một chuỗi các khối bộ đếm, tất cả cần phải khác nhau để tránh sự lặp lại trong phím kẽ. Các khối đối trọng don don cần phải bí mật.

Cách tiếp cận đơn giản nhất là bao gồm một trường truy cập và tăng thêm một trong mỗi khối bộ đếm tiếp theo.

  • Chức năng truy cập phong phú hơn cho chế độ mật mã CTR.
  • CTR là một chế độ hoạt động cho các mật mã khối.
  • Bản rõ được chia thành các khối và mỗi khối được XOR-ED với một phím kẽ để có được bản mã. KeyStream được sản xuất bằng cách mã hóa một chuỗi các khối bộ đếm, tất cả cần phải khác nhau để tránh sự lặp lại trong phím kẽ. Các khối đối trọng don don cần phải bí mật.

Cách tiếp cận đơn giản nhất là bao gồm một trường truy cập và tăng thêm một trong mỗi khối bộ đếm tiếp theo.

Hàm

>>> int.from_bytes(s, 'big')
1 ở cấp độ mô -đun theo
>>> int.from_bytes(s, 'big')
2 tạo ra một đối tượng mật mã CTR mới cho thuật toán cơ sở có liên quan. Các tham số của nó cho phép bạn xác định một khối bộ đếm với cấu trúc cố định:

Hướng dẫn python crypto util padding - python crypto sử dụng đệm

một tiền tố cố định, cố định

Hướng dẫn python crypto util padding - python crypto sử dụng đệm

Trường truy cập được mã hóa ở chế độ endian lớn

from Crypto.Cipher import AES
from Crypto.Util import Counter
from Crypto import Random

nonce = Random.get_random_bytes(4)
ctr = Counter.new(64, prefix=nonce, suffix=b'ABCD', little_endian=True, initial_value=10)
key = b'AES-128 symm key'
plaintext = b'X'*1000000
cipher = AES.new(key, AES.MODE_CTR, counter=ctr)
ciphertext = cipher.encrypt(plaintext)

Chiều dài của hai thành phần có thể thay đổi, nhưng cùng nhau phải lớn bằng kích thước khối (ví dụ: 16 byte cho AES).(nbits, prefix=b'', suffix=b'', initial_value=1, little_endian=False, allow_wraparound=False)

Ngoài ra, tham số

>>> int.from_bytes(s, 'big')
3 có thể được sử dụng để truyền một đối tượng khối bộ đếm (được tạo trước với hàm
>>> int.from_bytes(s, 'big')
4) cho một thành phần phức tạp hơn:

Trường truy cập, được mã hóa ở chế độ endian lớn hoặc endian nhỏ

tiếp đầu ngữgiá trị truy cậpPostfix

Giá trị bộ đếm được tăng thêm 1 tại mỗi cuộc gọi.

Parameters:
  • NBITS (Số nguyên) - Độ dài của giá trị bộ đếm mong muốn, tính theo bit. Nó phải là bội số của 8. (integer) – Length of the desired counter value, in bits. It must be a multiple of 8.
  • Tiền tố (chuỗi byte) - Tiền tố không đổi của khối bộ đếm. Theo mặc định, không có tiền tố được sử dụng. (byte string) – The constant prefix of the counter block. By default, no prefix is used.
  • Hậu tố (chuỗi byte) - Postfix không đổi của khối bộ đếm. Theo mặc định, không có hậu tố được sử dụng. (byte string) – The constant postfix of the counter block. By default, no suffix is used.
  • initS_VALUE (Số nguyên) - Giá trị ban đầu của bộ đếm. Giá trị mặc định là 1. Độ dài của nó tính theo bit không được vượt quá đối số
    >>> int.from_bytes(s, 'big')
    
    7.
    (integer) – The initial value of the counter. Default value is 1. Its length in bits must not exceed the argument
    >>> int.from_bytes(s, 'big')
    
    7.
  • Little_endian (Boolean) - Nếu
    >>> int.from_bytes(s, 'big')
    
    8, số bộ đếm sẽ được mã hóa ở định dạng Little Endian. Nếu
    >>> int.from_bytes(s, 'big')
    
    9 (mặc định), ở định dạng endian lớn.
    (boolean) – If
    >>> int.from_bytes(s, 'big')
    
    8, the counter number will be encoded in little endian format. If
    >>> int.from_bytes(s, 'big')
    
    9 (default), in big endian format.
  • allow_wraparound (boolean) - tham số này bị bỏ qua. (boolean) – This parameter is ignored.
Returns:

Một đối tượng có thể được truyền với tham số

>>> int.from_bytes(s, 'big')
3 sang mật mã chế độ CTR.

Nó phải giữ rằng LEN (tiền tố) + nbits // 8 + len (hậu tố) phù hợp với kích thước khối của mật mã khối bên dưới.

>>> int.from_bytes(b'P', 'big') 80 1 Mô -đun

________ 52 ________ 53 (x, y) ¶(x, y)

Mẫu số chung lớn nhất của

>>> int.from_bytes(b'P', 'big')
80
4 và
>>> int.from_bytes(b'P', 'big')
80
5.

________ 52 ________ 57 (s) ¶(s)

Chuyển đổi chuỗi byte thành một số nguyên dài (endian lớn).

Trong Python 3.2+, thay vào đó hãy sử dụng phương thức gốc: thay vào đó:

>>> int.from_bytes(s, 'big')

Ví dụ:

>>> int.from_bytes(b'P', 'big')
80

Đây là (về cơ bản) nghịch đảo của

>>> int.from_bytes(b'P', 'big')
80
8.

________ 52 ________ 60 (n, d)(n, d)

Trả lại trần (n/d), nghĩa là số nguyên nhỏ nhất r sao cho r*d> = n

________ 52 ________ 62 (n, randfunc = none) ¶(N, randfunc=None)

Trả về một số nguyên tố N-bit ngẫu nhiên.

N phải là một số nguyên lớn hơn 1. Nếu randfunc bị bỏ qua, thì

>>> n.to_bytes(blocksize, 'big')
3 được sử dụng.

________ 52 ________ 65 (n, randfunc = none) ¶(N, randfunc=None)

Trả về một số ngẫu nhiên nhiều nhất n bit dài.

Nếu

>>> n.to_bytes(blocksize, 'big')
6 bị bỏ qua, thì
>>> n.to_bytes(blocksize, 'big')
3 được sử dụng.

Không dùng nữa kể từ phiên bản 3.0: Chức năng này chỉ dành cho sử dụng nội bộ và có thể được đổi tên hoặc loại bỏ trong tương lai. Sử dụng

>>> n.to_bytes(blocksize, 'big')
8 thay thế.This function is for internal use only and may be renamed or removed in the future. Use
>>> n.to_bytes(blocksize, 'big')
8 instead.

________ 52 ________ 70 (n, randfunc = none) ¶(N, randfunc=None)

Trả về một số ngẫu nhiên với chính xác n bit, tức là một số ngẫu nhiên giữa 2 ** (n-1) và (2 ** n) -1.

Nếu

>>> n.to_bytes(blocksize, 'big')
6 bị bỏ qua, thì
>>> n.to_bytes(blocksize, 'big')
3 được sử dụng.

Không dùng nữa kể từ phiên bản 3.0: Chức năng này chỉ dành cho sử dụng nội bộ và có thể được đổi tên hoặc loại bỏ trong tương lai. Sử dụng

>>> n.to_bytes(blocksize, 'big')
8 thay thế.This function is for internal use only and may be renamed or removed in the future.

________ 52 ________ 70 (n, randfunc = none) ¶(a, b, randfunc=None)

Trả về một số ngẫu nhiên với chính xác n bit, tức là một số ngẫu nhiên giữa 2 ** (n-1) và (2 ** n) -1.

Nếu

>>> n.to_bytes(blocksize, 'big')
6 bị bỏ qua, thì
>>> n.to_bytes(blocksize, 'big')
3 được sử dụng.

Không dùng nữa kể từ phiên bản 3.0: Chức năng này chỉ dành cho sử dụng nội bộ và có thể được đổi tên hoặc loại bỏ trong tương lai. Sử dụng

>>> n.to_bytes(blocksize, 'big')
8 thay thế.This function is for internal use only and may be renamed or removed in the future. Use
>>> n = 80
>>> n.to_bytes(2, 'big')
b'\x00P'
7 instead.

________ 52 ________ 70 (n, randfunc = none) ¶(N, e=0, false_positive_prob=1e-06, randfunc=None)

Trả về một số ngẫu nhiên với chính xác n bit, tức là một số ngẫu nhiên giữa 2 ** (n-1) và (2 ** n) -1.

Parameters:
  • Không dùng nữa kể từ phiên bản 3.0: Chức năng này chỉ dành cho sử dụng nội bộ và có thể được đổi tên hoặc loại bỏ trong tương lai. (integer) – the exact length of the strong prime. It must be a multiple of 128 and > 512.
  • ________ 52 ________ 74 (a, b, randfunc = none) ¶ (integer) – if provided, the returned prime (minus 1) will be coprime to e and thus suitable for RSA where e is the public exponent.
  • Trả về một số ngẫu nhiên n để một (float) – The statistical probability for the result not to be actually a prime. It defaults to 10-6. Note that the real probability of a false-positive is far less. This is just the mathematically provable limit.
  • Không dùng nữa kể từ phiên bản 3.0: Chức năng này chỉ dành cho sử dụng nội bộ và có thể được đổi tên hoặc loại bỏ trong tương lai. Sử dụng
    >>> n = 80
    >>> n.to_bytes(2, 'big')
    b'\x00P'
    
    7 thay thế.
    (callable) – A function that takes a parameter N and that returns a random byte string of such length. If omitted, Crypto.Util.Padding0 is used.
Returns:

________ 52 ________ 79 (n, e = 0, false_positive_prob = 1e-06, randfunc = none) ¶

Không dùng nữa kể từ phiên bản 3.0: Chức năng này chỉ dành cho sử dụng nội bộ và có thể được đổi tên hoặc loại bỏ trong tương lai. Sử dụng

>>> n.to_bytes(blocksize, 'big')
8 thay thế.This function is for internal use only and may be renamed or removed in the future.

________ 52 ________ 70 (n, randfunc = none) ¶(u, v)

Trả về một số ngẫu nhiên với chính xác n bit, tức là một số ngẫu nhiên giữa 2 ** (n-1) và (2 ** n) -1.

Không dùng nữa kể từ phiên bản 3.0: Chức năng này chỉ dành cho sử dụng nội bộ và có thể được đổi tên hoặc loại bỏ trong tương lai.(N, false_positive_prob=1e-06, randfunc=None)

________ 52 ________ 74 (a, b, randfunc = none) ¶

Parameters:
  • Trả về một số ngẫu nhiên n để một (float) – The statistical probability for the result not to be actually a prime. It defaults to 10-6. Note that the real probability of a false-positive is far less. This is just the mathematically provable limit.
  • Không dùng nữa kể từ phiên bản 3.0: Chức năng này chỉ dành cho sử dụng nội bộ và có thể được đổi tên hoặc loại bỏ trong tương lai. Sử dụng
    >>> n = 80
    >>> n.to_bytes(2, 'big')
    b'\x00P'
    
    7 thay thế.
    (callable) – A function that takes a parameter N and that returns a random byte string of such length. If omitted, Crypto.Util.Padding0 is used.
Returns:

________ 52 ________ 79 (n, e = 0, false_positive_prob = 1e-06, randfunc = none) ¶

Trả về một số nguyên tố N-bit mạnh ngẫu nhiên. Trong bối cảnh này, P là nguyên tố mạnh nếu P-1 và P+1 có ít nhất một yếu tố chính lớn.(n, blocksize=0)

N (số nguyên) - chiều dài chính xác của số nguyên tố mạnh mẽ. Nó phải là bội số của 128 và> 512.

E (Integer) - Nếu được cung cấp, số nguyên tố được trả về (trừ 1) sẽ được đồng hành với E và do đó phù hợp với RSA trong đó E là số mũ công cộng.

FALSE_POSITIVE_PROB (Float) - Xác suất thống kê cho kết quả không thực sự là một nguyên tố chính. Nó mặc định là 10-6. Lưu ý rằng xác suất thực của một dương tính giả là ít hơn nhiều. Đây chỉ là giới hạn có thể chứng minh về mặt toán học.

randfunc (có thể gọi) - một hàm có tham số n và trả về một chuỗi byte ngẫu nhiên có độ dài đó. Nếu bị bỏ qua, Crypto.Util.Padding0 được sử dụng.

Các nguyên tố mạnh mới.

>>> n.to_bytes(blocksize, 'big')

Ví dụ:

>>> n = 80
>>> n.to_bytes(2, 'big')
b'\x00P'

Đây là (về cơ bản) nghịch đảo của

>>> int.from_bytes(b'P', 'big')
80
8.

________ 52 ________ 60 (n, d)(N)

Trả lại trần (n/d), nghĩa là số nguyên nhỏ nhất r sao cho r*d> = n