2.1 Khái niệm về mã hóa (encode) Trong mật mã học, một ngành toán học ứng dụng cho công nghệ thông tin, mã hóa là phương pháp để biến thông tin (phim ảnh, văn bản, hình ảnh...) từ định dạng bình thường sang dạng thông tin không thể hiểu được nếu không có phương tiện giải mã. Từ thời xa xưa, mã hóa được sử dụng nhiều trong các thư từ, điện tín, đặc biệt được ưa chuộng khi có chiến tranh xảy ra, đóng góp quan trọng vào việc đảm bảo an toàn thông tin. Ngày nay, thời đại mà internet phát triển một cách nhanh chóng, khi mà nhà nhà người người đều sử dụng internet và chia sẻ những thông tin cá nhân của mình trên đó. Việc bảo mật những thông tin này là thực sự cần thiết, và một trong những cách để bảo mật thông tin hữu hiệu nhất hiện nay là mã hóa. 2.2 Khái niệm về giải mã (decode) Giải mã là phương pháp để đưa từ dạng thông tin đã được mã hóa về dạng thông tin ban đầu, quá trình ngược của mã hóa.
Trang 1PHÁT TRIỂN ỨNG DỤNG WEB
TÊN ĐỀ TÀI : MÃ HÓA VÀ GIẢI MÃ TRANG PHP
MỤC LỤC
Trang 2I. SƠ LƯỢC VỀ PHP VÀ MÃ HÓA TRONG PHP
1. Sơ lược về PHP
PHP được xem là ngôn ngữ kịch bản phía máy chủ phổ biến nhất trên thế giới, nó đã phát triển rất nhiều kể từ khi các đoạn code inline đầu tiên xuất hiện trong các tập tin HTML tĩnh.
PHP khởi đầu như là một dự án mã nguồn mở nhỏ, nhưng theo đà phát triển, ngày càng nhiều người thấy rằng nó càng ngày càng hữu ích PHP được phát triển từ một sản phẩm có tên là PHP/FI PHP/FI do Rasmus Lerdorf tạo ra năm
1994, ban đầu được xem như là một tập con đơn giản của các mã kịch bản Perl để theo dõi tình hình truy cập đến bản sơ yếu lý lịch của ông trên mạng Ông đã đặt tên cho bộ mã kịch bản này là “Personal Home Page Tools” Khi cần đến các chức năng rộng hơn, Rasmus đã viết ra một bộ thực thi bằng C lớn hơn để có thể truy vấn tới Database và giúp cho người sử dụng phát triển các ứng dụng web đơn giản Rasmus đã quyết định công bố mã nguồn của PHP/FI cho mọi người xem, sử dụng cũng như sửa các lỗi có trong nó, đồng thời cải tiến mã nguồn.
• PHP viết hồi qui của “PHP: Hypertext Preprocessor”.
• PHP là ngôn ngữ lập trình kịch bản viết cho máy chủ mà được nhúng trong HTML Nó được sử dụng để quản lý nội dụng động, Database, Session tracking, …
• Nó được tích hợp với một số Database thông dụng như MySQL, PostgreSQL, Oracle, Sybase, Informix, và Microsoft SQL Server.
• PHP thực thi rất tuyệt vời, đặc biệt khi được biên dịch như là một Apache Module trên Unix side MySQL Server, khi được khởi động, thực thi các truy vấn phức tạp với các tập hợp kết quả khổng lồ trong thời gian Record-setting.
• PHP hỗ trợ một số lượng rộng rãi các giao thức lớn như POP3, IMAP,
và LDAP PHP4 bổ sung sự hỗ trợ cho Java và các cấu trúc đối tượng phân phối (COM và CORBA)
• Cú pháp PHP là giống C.
Trang 32 Khái niệm về mã hóa và giải mã
2.1 Khái niệm về mã hóa (encode)
Trong mật mã học, một ngành toán học ứng dụng cho công nghệ thông tin, mã hóa là phương pháp để biến thông tin (phim ảnh, văn bản, hình ảnh ) từ định dạng bình thường sang dạng thông tin không thể hiểu được nếu không có phương tiện giải mã.
Từ thời xa xưa, mã hóa được sử dụng nhiều trong các thư từ, điện tín, đặc biệt được ưa chuộng khi có chiến tranh xảy ra, đóng góp quan trọng vào việc đảm bảo an toàn thông tin.
Ngày nay, thời đại mà internet phát triển một cách nhanh chóng, khi mà nhà nhà người người đều sử dụng internet và chia sẻ những thông tin cá nhân của mình trên đó Việc bảo mật những thông tin này là thực sự cần thiết, và một trong những cách để bảo mật thông tin hữu hiệu nhất hiện nay là mã hóa.
2.2 Khái niệm về giải mã (decode)
Giải mã là phương pháp để đưa từ dạng thông tin đã được mã hóa về dạng thông tin ban đầu, quá trình ngược của mã hóa.
Trang 4II. CÁC KIỂU MÃ HÓA TRONG PHP VÀ CÁCH GIẢI MÃ
1. Mã hóa Encode / Decode
1.1Giới thiệu
Trường hợp cần viết một chuỗi unicode được mã hóa mà không được sử dụng trực tiếp ký tự unicode vào code Cách này đặc biệt hữu dụng trong việc sửa đổi bytecode của java để hiển thị tiếng việt.
1.2Ví dụ
Sử dụng hàm json_encode sẽ giúp bạn tìm ra chuỗi mã hóa unicode.
header('content-type:application/json'); #or text/plain
echo json_encode(array('fullname'=>'hoang','address'=>'An Giang','LoanType'=>'Vay theo lương'));
Kết quả ra chuỗi json thế này chứa các kỹ tự unicode mã hóa giống như thế này [{"fullname":"hoang","address":"An Giang","loanType":"Vay theo l\u01b0\u01a1ng"}]
Để hiển thị chuỗi giải mã đọc được từ ký tự unicode mã hóa bởi json_encode, chúng
ta gọi hàm json_decode.
print_r(json_decode('["Vay theo l\u01b0\u01a1ng"]'));
Kết quả chuyển thành mảng có chứa ký tự đã giải mã:
Array ( [0] => Vay theo lương )
1.3Cách giải mã
• Nếu mã hóa có dạng eval(base64_decode
php $o="encrypted text";eval(base64_decode('rubbish'));return;
Để giải mã đoạn code bị mã họa dạng này, chỉ cần copy đoạn “‘encrypted text” vào khung và nhấn nút Decode this Mess là được Trang web với công cụ giải mã: http://ottodestruct.com/decoder.php
Trang 5• Nếu mã hóa có dạng eval(gzinflate(base64_decode(‘encrypted text’)));
eval(gzinflate(base64_decode('80jNyclXyFTPVUhJTc5PSU0BAA==')));
Để giải mã đoạn code bị mã hóa dạng này, bạn chỉ cần copy đoạn:
“80jNyclXyFTPVUhJTc5PSU0BAA==” vào khung và nhấn decode là được Công cụ giải mã: http://www.tareeinternet.com/scripts/decrypt.php
• Mã hóa dạng Rubbish
text';eval(base64_decode('rubbish'));
Để giải mã, bạn copy đoạn “encrypted text” vào khung và nhấn Decode this Rubbish Công cụ giải mã: http://www.tareeinternet.com/scripts/byterun.php
• Một số kiểu encoding có thể sử dụng
MD5 converter
SHA1 converter
Chatset converter / iconv
Base64 encode
Base64 decode
UTF8 encode
UTF8 decode
Raw url encode
Raw url decode
HTML entities encode
HTML entities decode
Unix Time to Human Date
Human Date to Unix Time Stamp
Remove duplicate lines
Sort text lines
Pirate Text
Backwards – Mirrored Text
Trang 6Ngoài ra có thể tìm hiểu thêm Sử dụng công cụ chuyển đổi
encoding/decoding chuỗi online:
http://www.cafewebmaster.com/online_tools/utf8_encode
1.4Mã hóa đối tượng
Nhiều lúc việc mã hóa mảng thành chuỗi json không tiện cho lắm, dễ bị người khác đọc dữ liệu vì tính bảo mật Có một cách khác giúp bạn mã hóa mọi đối tượng thành kiểu chuỗi, và Wordpress cũng đã sử dụng cách mã hóa các đối tượng của nó với kiểu này.
Bằng cách sử dụng hàm serialize() để mã hóa đối tượng và hàm ngược unserialize() sẽ biến nội dung kiểu chuỗi được mã hóa bởi serialize() thành chính object trước đó.
<?php
$data = array('name'=>"Hoang", "old"=>24);
var_dump($data);
/* array
'name' => string 'Hoang' (length=5)
'old' => int 24
*/
// Serialize array $data
$text_serialize = serialize($data);
var_dump($text_serialize);
/* string 'a:2:{s:4:"name";s:3:"Hoang";s:3:"old";i:24;}' (length=44) */
// Unserialize array $data
$data_unserialize = unserialize($text_serialize);
var_dump($data_unserialize);
/* array
'name' => string 'Hoang' (length=5)
'old' => int 24
*/
?>
Trang 7Kết quả:
a:2:{s:4:"name";s:3:"Hoang";s:3:"old";i:24;}
Rất tiện cho lưu các đối tượng PHP vào Database.
Lưu ý: Ta có thể sử dụng serialize() và unserialize() cho mọi đối tượng PHP: object, array, base object,…
Trong Wordpress có viết hàm giúp bạn kiểm tra một chuỗi được tạo bởi serialize từ một đối tượng, trước khi sử dụng hàm giải mã đối tượng unserialize bạn nên kiểm tra có hợp lệ không với hàm is_serialized của wordpress Hàm này trích dẫn có sẵn trong wordpress
<?php
//I didn't write this code, it's from WordPress actually
function is_serialized( $data ) {
// if it isn't a string, it isn't serialized
if ( !is_string( $data ) )
return false;
$data = trim( $data );
if ( 'N;' == $data )
return true;
if ( !preg_match( '/^([adObis]):/', $data, $badions ) )
return false;
switch ( $badions[1] ) {
case 'a' :
case 'O' :
case 's' :
if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )
return true;
break;
case 'b' :
case 'i' :
case 'd' :
if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )
return true;
break;
}
return false;
}
?>
Trang 8III DEMO MÃ HÓA FILE PHP BẰNG ZEND GUARD
- Bước 1 :
http://www.zend.com/en/downloads
Đồng thời hãy tiến hành cài đặt và khởi động chương trình
- Bước 2 : Tạo 1 Project bằng cách : File >>> New >>> Zend Guard Project.
Trang 9- Bước 3 : Chọn source nguồn cần
mã hóa, ví dụ bằng file config.php vì file này chứa các khai báo database quan trọng của website/forum
>>> Next.
Trang 10- Bước 4 : Lựa chọn cấu hình cách thức mã hóa cho phiên bản PHP phù hợp với nhu cầu sử dụng.
- Bước 5 : Nhấn nút Encode project như hình để bắt đầu tiến trình mã hóa:
- Kết quả : Sau khi Encode thành công, chương trình sẽ tạo ra file có nội dung
mã hóa tại Output Location: D:\Temp\Zend mà chúng ta đã khai báo trong
thông tin Project
Trang 11IV KẾT LUẬN
- Càng ngày càng có rất nhiều loại lỗ hổng bảo mật mạng được tìm ra
- Nhớ các tools và công cụ, chúng ta đã tìm ra những phương pháp tấn công
lỗ hổng đề từ đó tìm các biện pháp khắc phục cho hệ thống mạng Lan của mình Việc vận dụng các công cụ có sẵn này bất kỳ người nào cũng có thể tự tìm tòi và khám phá ra được, tuy nhiên hãy sử dụng nó vào mục đích tốt, không nên sử dụngvào mục đích xấu và lạm dụng đời sống riêng tư cá nhân
- Trong đề tài này, mình đã thu thập được các thông tin trên các diễn đàn và một số hiểu biết cá nhân Phần cài đặt chạy trực tiếp trên máy và đã thử nghiệm thành công
- Tuy nhiên, trong quá trình biên soạn, có thể kiến thức còn chưa chuyên sâu
và một số thông tin thu thập trên mạng nên việc tìm hiểu còn nhiều thiếu sót, kính mong Quý Thầy Cô và các bạn thông cảm
Trang 12TÀI LIỆU THAM KHẢO
Tiếng Việt :
1 Hưng Phú, “Hướng dẫn mã hóa code HTML và PHP”
Link :
https://www.youtube.com/watch?v=VzaZjhk6DDs
2 Mr.Toan, “Tổng hợp các trang mã hóa – giải mã code php”
Link :
http://congtoan.net/tong-hop-cac-trang-ma-hoa-giai-ma-code-php/
Tiếng Anh :
Convert character encoding – PHP
Link :
http://php.net/manual/en/function.mb-convert-encoding.php