Tạo mã Captcha bằng C++
Hướng dẫn cách tạo mã Captcha bằng ngôn ngữ lập trình C++ với việc sử dụng thư viện đồ họa để tạo hình ảnh và văn bản ngẫu nhiên, giúp bảo vệ các ứng dụng web hoặc phần mềm khỏi các cuộc tấn công tự động.
Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo mã Captcha đơn giản bằng C++, bao gồm việc tạo chuỗi ngẫu nhiên, thêm nhiễu và hiển thị trên hình ảnh.
Mã C++:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <opencv2/opencv.hpp>
std::string generateCaptcha(int length) {
std::string captcha;
const char charset[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
int maxIndex = sizeof(charset) - 1;
for (int i = 0; i < length; ++i) {
captcha += charset[rand() % maxIndex];
}
return captcha;
}
void createCaptchaImage(const std::string& captcha) {
int width = 200;
int height = 80;
cv::Mat image(height, width, CV_8UC3, cv::Scalar(255, 255, 255));
// Set font and draw text
int fontFace = cv::FONT_HERSHEY_SIMPLEX;
double fontScale = 1;
int thickness = 2;
cv::Point textOrg(10, 50);
cv::putText(image, captcha, textOrg, fontFace, fontScale, cv::Scalar(0, 0, 0), thickness);
// Add noise
for (int i = 0; i < 1000; ++i) {
int x = rand() % width;
int y = rand() % height;
image.at<cv::Vec3b>(y, x) = cv::Vec3b(rand() % 256, rand() % 256, rand() % 256);
}
cv::imwrite("captcha.png", image);
std::cout << "Captcha image saved as captcha.png" << std::endl;
}
int main() {
srand(time(0));
std::string captcha = generateCaptcha(6);
std::cout << "Generated Captcha: " << captcha << std::endl;
createCaptchaImage(captcha);
return 0;
}
Giải thích chi tiết từng dòng code:
-
generateCaptcha()
: Tạo chuỗi Captcha ngẫu nhiên từ các ký tự chữ cái và số. -
createCaptchaImage()
: Tạo hình ảnh Captcha sử dụng thư viện OpenCV, bao gồm việc thêm văn bản Captcha và nhiễu lên hình ảnh. -
main()
: Gọi hàmgenerateCaptcha
để tạo chuỗi Captcha vàcreateCaptchaImage
để tạo hình ảnh tương ứng.
Yêu cầu hệ thống:
- C++ Compiler (GCC, MSVC, ...)
- Thư viện OpenCV 4.0 trở lên
Cách cài đặt các thư viện để chạy được đoạn mã C++ trên:
- Cài đặt OpenCV: Hướng dẫn cài đặt OpenCV
- Liên kết với OpenCV khi biên dịch:
g++ -o captcha captcha.cpp `pkg-config --cflags --libs opencv4`
Lời khuyên:
- Nên chọn các ký tự và màu sắc khó đoán hơn để tăng tính bảo mật.
- Thêm nhiều nhiễu và biến dạng văn bản để tăng độ khó nhận diện.