Bài đăng

Đang hiển thị bài đăng từ Tháng 11, 2018

C++ Con trỏ (Pointer) toàn thư: Phần 1: Căn bản về Con trỏ.

Trong bài " Dàn bài ", mình đã đưa ra dàn bài về seri bài viết Con trỏ như sau: Phần 1: Căn bản về Con trỏ. Phần 2: Con trỏ với các cấu trúc dữ liệu căn bản. Phần 3: Con trỏ với Hàm. Phần 4: Con trỏ "đa cấp", đánh nhau bằng "con trỏ". Phần 5: Con trỏ "thông minh" dành cho Lập trình viên "thông minh". Và đây chính là bài viết đầu tiên trong seri Con trỏ: Căn bản về Con trỏ. Định nghĩa con trỏ. Phải nhớ: "Con trỏ chỉ là 1 biến NGUYÊN "! Nó cũng là 1 biến, và giá trị của nó là 1 số NGUYÊN , thuộc tập SỐ NGUYÊN Z ! Trong chương trình C++, con trỏ lưu trữ giá trị nguyên là địa chỉ ảo  của biến mà nó trỏ đến! Ví dụ như là 0x1a651995, 0x2cd139e, ... Bạn thấy đó, các số hexa kia chẳng qua là dạng viết ngắn gọn của địa chỉ ô nhớ ảo mà Hệ điều hành cung cấp cho vùng nhớ STACK của chương trình. Mà đã là địa chỉ thì nó phải là số nguyên  rồi!  Do đó, từ bây giờ, nếu có gặp khai báo  data_type *p; thì bạn phải nhớ p cũ

C++ Con trỏ (Pointer) toàn thư: Phần 0 - Giới thiệu dàn bài.

Đây là 1 seri bài viết về một thứ mà mọi người đều nói nó là thứ "khốn nạn" nhất của C/C++; và cũng chính nó đã trở thành lý do phổ biến khiến nhiều lập trình viên vô cùng ác cảm với C/C++. Ko gì khác, đó chính là CON TRỎ (POINTER) ! Và từ nay, thay vì nói C/C++, mình sẽ chỉ nói C++. Lý do là vì 2 thằng này nó thực sự chỉ là 1; kiểu như bạn thời trẻ trâu và bạn thời trưởng thành ấy mà! Mình sẽ viết 1 bài viết để khẳng định điều này sau; còn bây giờ là thời lượng dành cho Pointer. Con trỏ là 1 khái niệm chỉ được lập trình viên sử dụng ở ngôn ngữ lập trình C++. Mình nhấn mạnh là " chỉ được lập trình viên sử dụng " nhé! Nghĩa là trong những ngôn ngữ lập trình khác vẫn sẽ có sử dụng con trỏ! Đọc đến đây chắc hẳn nhiều bạn sẽ tự thắc mắc kiểu "Java làm j có con trỏ đâu, code sướng vãi; chưa nói đến Python ...". Đúng vậy, khi code Java, bạn sẽ ko gặp đến cái j gọi là con trỏ; vì máy ảo JVM đã xử lý hết cho bạn rồi. Và cái mà JVM xử lý ở đây sẽ bao gồm việ

Linux: chuỗi thử thách đầu tiên để tự kiểm tra việc học Linux cơ bản.

Hình ảnh
Đây là bài viết - mà chính xác hơn thì là solution - của 1 chuỗi các bài thực hành kiểm nghiệm lại việc học Linux cơ bản. Chuỗi bài thực hành này được cung cấp bởi Overthewire . Yêu cầu của các bài tập trong chuỗi này đều là yêu cầu người làm phải lấy được Password  (mật khẩu) để giúp Login  (đăng nhập) vào Level tiếp theo. Có 1 số Level ko yêu cầu lấy Password mà chỉ cần thực hiện đăng nhập theo yêu cầu. Solution này được mình tổng hợp lại sau khi đã hoàn thành Level 33 (Level cuối cùng hiện tại) của chuỗi bài thực hành này. Bản thân mình thấy chuỗi bài thực hành cơ bản này khá có ích với những ai đang tìm hiểu về Linux cơ bản. Do đó mình viết lại vào đây để lưu trữ cũng như sau này cho em trai mình tham khảo. Lưu ý, toàn bộ đề bài ở trong link của Overthewire , do đó mình sẽ ko nhắc lại đề bài ở mỗi Level; nhưng sẽ diễn giải lại yêu cầu của đề bài để có thể dễ hiểu hơn. Level 0 Level này yêu cầu bạn phải SSH (Secure Shell)  vào 1 Host  (máy chủ) với các yêu cầu: User

Smart Pointer trong C++? Nó cũng chỉ là 1 "đối tượng" thôi, dễ hiểu mà!

Hình ảnh
Đây là bài viết đầu tiên của mình về 1 chức năng của 1 ngôn ngữ lập trình riêng: "Con trỏ thông minh (Smart pointer) trong C++". Tạm gác qua mọi "ác cảm" của thế giới với C++, cũng như "con trỏ", mình sẽ giới thiệu khái quát một cách "vô cùng dễ hiểu" về Smart pointer trong C++ trước. Có thời gian, mình sẽ viết 1 seri bài viết nói về "con trỏ" của C++; và đương nhiên trong đó, mình sẽ viết đầy đủ toàn bộ về Smart Pointer.  (nguồn: TeckTalk Fb fanpage) Vì sao lại là Smart Pointer? Khác j Pointer thông thường? Đúng vậy, vì nó "thông minh" hơn, nên nó được gọi là Smart Pointer  thôi; còn thằng Pointer cổ điển thì là Stupid Pointer  chứ sao! Vì nó "smart" hơn nên nó có nhiều khác bọt so với Pointer chứ.  Trong C/C++, có 2 vùng bộ nhớ để lưu lại các biến, gọi là Stack  và Heap . Khi bạn khai báo một biến mới mà dùng từ khóa new  thì biến đó được quẳng vào Heap, còn nếu ko dùng new  thì nó sẽ được quẳng vào

Hệ mật mã khối và các thuật toán mã hóa khối kinh điển: DES - 2DES - 3DES

Hình ảnh
Trong bài viết trước, mình đã trình bày về cơ chế hoạt động của giao thức trao chuyển khóa đối xứng Needham - Schroeder . Khóa đó là "khóa phiên". Vậy "khóa" đó là cái j và được tạo ra như thế nào, độ phức tạp của việc phá giải cũng như ứng dụng của nó ở đâu? Vân vân và mây mây. Tất cả những điều đó sẽ được mình trình bày trong bài viết này. Bài viết này mình sẽ giới thiệu về Hệ mật mã khối. Sau đó sẽ trình bày thuật toán mã hóa kinh điển DES và các mở rộng của nó như 2-DES và 3-DES; kèm theo đó là ưu nhươc điểm cũng như cách thức tấn công để phá mã. Sau cùng mình sẽ nêu ra những ứng dụng của Hệ mã khối cũng như DES. Có lẽ ko có một chuyên ngành nào của Công nghệ thông tin mà sử dụng nhiều Toán như Lý thuyết Mật mã học trong An Toàn Thông Tin cả, mà lại toàn Toán khó mới đểu chứ! Đến bây giờ khi ngồi tự học Cryptography, mình mới thấy sức mạnh thật sự của môn Số Học hồi cấp 2. Hồi trước khi Sư Phụ dạy trên lớp, mình cũng đã thấy được sự bá đạo của các định