Hướng dẫn để thực hiện AES trong Python
Ảnh của Chris Panas trên unplashBạn có thể nghe nói về vụ bê bối nội trợ đã diễn ra trong quá trình kiểm dịch. Houseparty là một ứng dụng giết người thời gian tuyệt vời trong những ngày dài cách ly, nó đã tập hợp bạn bè và cho phép họ chơi các trò chơi nhỏ trong khi trò chuyện video với nhau trên điện thoại của họ, tất cả những điều này được cung cấp tự do bởi chính họ. Đó là tất cả các trò chơi và trò chơi cho đến khi số lượng lớn các tài khoản Netflix và Spotify bắt đầu bị hack.Houseparty scandal that has taken place during the quarantine. Houseparty was an excellent time killer app during the long days of the quarantine, it gathered friends and allowed them to play mini-games while video chatting with each other on their phones, all of this provided freely by Houseparty themselves. It was all fun and games till vast numbers of Netflix and Spotify accounts started to get hacked.
Có tin đồn rằng người nội trợ đã bị vi phạm dữ liệu, trong đó dữ liệu của họ bị đánh cắp bởi một bên thứ ba và được tin tặc sử dụng để có quyền truy cập vào các tài khoản cá nhân. Houseparty kể rằng họ không liên quan gì đến làn sóng tin tặc lẻn vào tài khoản của người dân. Chúng tôi có lẽ sẽ không bao giờ chắc chắn những gì đã xảy ra ở đây nhưng thiệt hại đã được thực hiện. Tôi nghĩ rằng tất cả chúng ta có thể học được điều gì đó từ toàn bộ sự cố này để ngăn chặn và giảm tác động của các vi phạm dữ liệu trong tương lai:
Chúng tôi không đủ trách nhiệm
Chúng tôi không coi trọng quyền riêng tư Internet của chúng tôi. Người dùng trung bình sử dụng lại mật khẩu và email trong một số ứng dụng, có thể có mức độ danh tiếng và bảo mật khác nhau rất nhiều, mà không nhận thức được những nguy hiểm mà nó ngụ ý. Nhưng người dùng chỉ có thể được tính đến rất nhiều. Chúng tôi là nhà phát triển phải đảm bảo rằng tất cả dữ liệu chúng tôi có được từ người dùng được đối xử có trách nhiệm: dữ liệu không chỉ được lưu trữ trong môi trường an toàn, mà còn được mã hóa bằng thuật toán an toàn, chẳng hạn như AES.encrypted with a a secure algorithm, such as AES.
Thực hiện AES trong Python
May mắn thay, chúng tôi không phải thực hiện AES từ đầu, nhưng bạn có thể thử nếu bạn cảm thấy cay. Để tránh làm như vậy, trước tiên chúng ta cần cài đặt thư viện Pycrypto, có thể được thực hiện qua PIP với lệnh sau:pycrypto library, which can be done via pip with the following command:
pip install pycrypto
mà nên chạy mà không có lỗi. Khi Pycrypto được cài đặt, hãy tạo tệp Python và viết phần sau để nhập mọi thứ chúng ta cần:pycrypto is installed, create a python file and write the following to import everything we need:
Bây giờ chúng tôi sẽ tạo một lớp cho mật mã AES của chúng tôi với hàm tạo sau:
Hãy đi bộ nhanh qua hàm tạo, nó nhận được một khóa có thể có độ dài. Sau đó, chúng tôi tiến hành tạo ra một hàm băm 256 bit từ phím đó. Một hàm băm về cơ bản là một định danh duy nhất có độ dài nhất định, 32 ký tự trong trường hợp này, của bất kỳ đầu vào nào bất kể độ dài của nó. Điều này cho phép bạn có thể chuyển hàm xây dựng tên hoặc một cụm từ và nó sẽ tạo ra một khóa 256 bit duy nhất cho mật mã của bạn. Chúng tôi cũng đặt block_size
thành 128, đó là kích thước khối của AES.
Trước khi chúng tôi tiến hành xác định các phương thức encrypt
and decrypt
cho lớp AECHIPHER của chúng tôi, trước tiên hãy tạo ra __pad
và __unpad
Methods. Ngoài ra, người mới bắt đầu trong Python có thể học hỏi từ các hướng dẫn Python tốt nhất để tăng cường học tập của họ.
Tập giấy
__pad
Method nhận được ____77 để được mã hóa và thêm một số byte cho văn bản là bội số của 128 bit. Số này được lưu trữ trong number_of_bytes_to_pad
. Sau đó, trong ascii_string
we tạo ra ký tự đệm của chúng tôi và block_size
0 sẽ chứa thời gian ký tự đó number_of_bytes_to_pad
. Vì vậy, chúng tôi chỉ phải thêm block_size
0 ở cuối plain_text của chúng tôi để bây giờ nó là bội số của 128 bit.
Undad
Theo cách ngược lại, __unpad
Method sẽ nhận được văn bản được giải mã, còn được gọi là plain_text
và sẽ xóa tất cả các ký tự được thêm vào trong __pad
Method. Vì vậy, trước tiên chúng ta phải xác định nhân vật cuối cùng và lưu trữ trong block_size
6 Làm thế nào nhiều byte chúng ta cần cắt giảm thứ tự plain_text
in để giải nén nó.
Mã hóa
Với hai phương pháp này, hãy thực hiện encrypt
Method
Phương pháp encrypt
nhận được plain_text
sẽ được mã hóa. Đầu tiên chúng tôi đệm đó plain_text
để có thể mã hóa nó. Sau khi chúng tôi tạo ra một ngẫu nhiên mới encrypt
2 với kích thước của một khối AES, 128bits. Bây giờ chúng tôi tạo ra mật mã AES của chúng tôi với encrypt
3 với encrypt
4 của chúng tôi, trong chế độ encrypt
5 và với encrypt
2 vừa được tạo của chúng tôi. Bây giờ chúng tôi gọi encrypt
Function của encrypt
8 của chúng tôi, chuyển nó plain_text
của chúng tôi đã chuyển đổi thành bit. Đầu ra được mã hóa sau đó được đặt sau encrypt
2 của chúng tôi và được chuyển đổi trở lại từ các bit thành ký tự có thể đọc được.
Giải mã
Bây giờ chúng ta có thể mã hóa văn bản, nhưng tôi chắc chắn rằng chúng ta muốn có thể giải mã nó:
Để giải mã, chúng ta phải quay lại tất cả các bước được thực hiện trong encrypt
Method. Đầu tiên, chúng tôi chuyển đổi decrypt
2 của chúng tôi thành bit và trích xuất encrypt
2, đây sẽ là 128 bit đầu tiên của decrypt
2 của chúng tôi. Giống như trước đây, bây giờ chúng tôi tạo ra một mật mã AES mới với khóa của chúng tôi, trong chế độ CBC và với encrypt
2 được trích xuất. Bây giờ chúng tôi gọi phương thức decrypt
của encrypt
8 của chúng tôi và chuyển đổi nó thành văn bản từ các bit. Chúng tôi loại bỏ phần đệm bằng __unpad
và đó là nó!
Lớp decrypt
9 cuối cùng sẽ trông như sau:
Suy nghĩ cuối cùng
Bây giờ bạn có thể mã hóa và giải mã dữ liệu của mình! Nếu bạn muốn chơi với AES hay chỉ kiểm tra xem việc triển khai của bạn có chính xác không, hãy thử mật mã AES trực tuyến này. Nếu bạn bị thu hút về cách AES hoạt động, hãy thoải mái vượt qua bài viết của tôi về nó.
Như mọi khi, hãy liên hệ với tôi nếu bạn cần. Tất cả các mã được tìm thấy trong hướng dẫn này là miễn phí trên GitHub.
Tôi hy vọng tất cả các bạn tìm thấy hướng dẫn này hữu ích, mã hóa hạnh phúc!
Cảm ơn bạn.