• Thứ Tư, 20/09/2006 15:01 (GMT+7)

    Cách mã hóa 1 cột trong bảng FoxPro

    Câu hỏi :
    Xin hướng dẫn cách mã hóa 1 trường (cột) trong 1 bảng FoxPro để không cho người ngoài xem được nội dung.
     

    Trả lời :

    Bạn có thể dùng giải thuật mật mã hóa/giải mật nào mà bạn thích (phụ thuộc vào mục tiêu mà bạn muốn đạt được). Có 2 loại mật mã hóa: mật mã hóa đối xứng (hay bí mật) và mật mã hóa bất đối xứng (hay công khai). Do tính chất đã biết của từng loại mật mã hóa mà người ta thường dùng loại mật mã hóa bí mật để mật mã hóa dữ liệu được lưu và xử lý cục bộ, thí dụ như mã hóa 1 hay nhiều trường dữ liệu của bạn. Có rất nhiều giải thuật mật mã hóa bí mật khác nhau, tính chất chung của chúng là dùng 2 khóa: 1 khóa để mật mã và 1 khóa để giải mã, nhưng nếu biết 1 trong 2 khóa ta sẽ suy ra được khóa kia dễ dàng. Tuỳ thuộc vào độ dài khóa và giải thuật mật mã cụ thể mà mức độ tin cậy, an toàn cao hay thấp. Để cho bạn 1 cái nhìn sơ khởi ban đầu, chúng tôi xin giới thiệu giải thuật mật mã hóa rất đơn giản sau đây để mã hóa chuỗi dữ liệu trong password. Ta chọn khóa mật mã là 1, và hàm mật mã là cộng khóa mã vào từng ký tự của password, kết quả là 1 chuỗi có cùng độ dài nhưng nội dung từng ký tự đã tăng 1 đơn vị. Giải thuật này được hiện thực bởi hàm EnCrypt() bằng C++ như sau:

     void Encrypt(char* pass, char* enpass, int len) {
     int i;
     for (i=0; i < strlen(pass); i++)
     enpass[i] = pass[i]+1;
     enpass[i] = 0; 'kết thúc chuỗi
     }
     Với hàm và khóa mật mã như trên ta có thể suy ra khóa giải mật là -1 và hàm giải mật giống y như là hàm mật mã. Cụ thể giải thuật giải mã được hiện thực bởi hàm DeCrypt() bằng C++ như sau:
     void Decrypt(char* pass, char* enpass, int len) {
     int i;
     for (i=0; i < strlen(pass); i++)
     pass[i] = enpass[i]-1;
     pass[i] = 0; 'kết thúc chuỗi }

     Dĩ nhiên với hàm mật mã đơn giản cũng như độ dài khoá quá ngắn như trên thì kết quả mật mã hóa có độ an toàn, bảo mật không cao, nhưng qua đó bạn sẽ thấy rõ hơn về việc mật mã hóa và giải mật dữ liệu.

     Tóm lại, muốn mật mã hóa 1 trường (hay nhiều trường) của 1 database, trước khi lưu dữ liệu lên database, bạn phải mật mã hóa dữ liệu từ dạng rõ sang dạng mật. Ngược lại, trước khi dùng lại trường đó, bạn phải đọc từ database rồi gọi hàm giải mật. Như vậy, những ai không biết điều này mà truy xuất thẳng database, họ chỉ nhận được dữ liệu ở dạng mật nên không thể dùng đúng thông tin được.
     

    Chuyên mục: Lập trình