Nghiêm túc mà nói, KHÔNG SỬ DỤNG aes_encrypt () của MySQL Đây là phương pháp sử dụng mật mã khối không an toàn nhất. Nó đang sử dụng chế độ ECB và tôi có thể đưa ra một ví dụ minh họa đơn giản tại sao đây là một sai lầm nghiêm trọng.
Tin nhắn văn bản thuần túy:
Cùng một thông báo được mã hóa bằng chế độ ECB (không quan trọng bạn sử dụng mật mã nào):
Cùng một thông báo CHÍNH XÁC sử dụng chế độ CBC (một lần nữa, không quan trọng bạn sử dụng mật mã nào):
Có nhiều lý do hơn nữa không sử dụng aes_encrypt của mysql, đáng chú ý nhất là mọi truy vấn bạn gửi đi cũng sẽ có khóa aes mà bạn sử dụng. Nếu cơ sở dữ liệu bị xâm phạm, kẻ tấn công sẽ kích hoạt ghi nhật ký và chỉ cần lấy khóa aes của bạn và giải mã toàn bộ cơ sở dữ liệu .
Vì vậy, những gì nên bạn sử dụng? Tôi thích lớp này trong thời điểm hiện tại. Nó sử dụng chế độ CBC với chức năng String2Key và IV. Bạn có thể sử dụng khóa chính làm IV của mình, mỗi thư phải có một IV duy nhất. Sẽ ổn nếu kẻ tấn công biết IV và nếu chúng liên tục, miễn là việc triển khai mật mã khối được bảo mật. Việc sử dụng lại IV khiến WEP kém an toàn hơn nhiều .