Các mô -đun hữu ích mà don lồng thuộc về bất kỳ gói nào khác. 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ụ:Crypto.Util.Padding
Mô -đun>>> 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]
Áp dụng đệm tiêu chuẩn.
|
Dữ liệu gốc với phần đệm thích hợp được thêm vào cuối. |
Chuỗi byte |
Loại bỏ đệm tiêu chuẩn.
|
Dữ liệu gốc với phần đệm thích hợp được thêm vào cuối. |
Chuỗi byte |
________ 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'
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. |
>>> 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'
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. |
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.
|
________ 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ề.
|
________ 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:
một tiền tố cố định, cố định
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ập | Postfix |
Giá trị bộ đếm được tăng thêm 1 tại mỗi cuộc gọi.
|
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'] 804 và
>>> int.from_bytes[b'P', 'big'] 805. ________ 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'] 808. ________ 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.
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.
|
________ 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.
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] ¶
|
________ 52 ________ 79 [n, e = 0, false_positive_prob = 1e-06, randfunc = none] ¶ |
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.Padding
0 đượ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'] 808. ________ 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