Bài viết mới nhất

Tổng 2300 bài
Bảo mật 22/09/2026 6 phút

Diffie-Hellman: tạo bí mật chung mà không hề gửi nó qua mạng — đo thật

RSA giải bài trao khóa bằng cách mã khóa AES rồi gửi. Diffie-Hellman làm điều còn ảo diệu hơn: hai bên tự tính ra CÙNG một khóa bí mật mà bí mật đó không bao giờ đi qua mạng. Bài này đo thật bằng openssl X25519 — Alice và Bob mỗi bên chỉ dùng khóa riêng của mình + khóa công khai của người kia, cho ra hai giá trị giống hệt nhau. Kèm forward secrecy và bẫy MITM.

Bảo mật 22/09/2026 5 phút

Mã hóa file bằng mật khẩu: ghép AES, PBKDF2 và salt lại — đo thật bằng openssl

Người dùng nhớ mật khẩu, nhưng AES-256 cần khóa nhị phân 32 byte — khoảng cách đó do hàm dẫn khóa (KDF) lấp. Bài này mã hóa một file thật bằng openssl với AES-256-CBC + PBKDF2: xem header Salted__ tự chứa salt, giải mã đúng ra nội dung còn sai mật khẩu thì bad decrypt, và cùng file+mật khẩu hai lần cho bản mã khác nhau nhờ salt ngẫu nhiên.

Bảo mật 22/09/2026 6 phút

TOTP: mã 6 số của xác thực hai lớp thực ra là gì — tự tính bằng python

Mã 6 số đổi mỗi 30 giây trên Google Authenticator không hề được server gửi tới điện thoại. Nó là HMAC-SHA1 của bí mật chung với thời gian, cắt lấy 6 chữ số. Bài cuối sê-ri mật mã tự tính TOTP từ đầu bằng python theo RFC 6238: cùng bí mật + cùng mốc thời gian cho cùng mã, mã không đổi trong cửa sổ 30s rồi đổi sang cửa sổ mới.

Công cụ 22/09/2026 5 phút

Pipe và file descriptor: ba luồng của Unix, và bẫy thứ tự 2>&1

Pipe và chuyển hướng là nền của dòng lệnh Unix, nhưng nhiều người dùng mà không hiểu ba luồng stdin/stdout/stderr tách nhau thế nào — dẫn tới bẫy kinh điển: cmd 2>&1 > file lại KHÔNG gộp được lỗi vào file. Bài mở đầu sê-ri Unix đo thật bằng bash: tách stdout/stderr, và vì sao thứ tự của > và 2>&1 quyết định kết quả.

Công cụ 22/09/2026 4 phút

git stash: cất tạm việc dở để đổi nhánh gấp — và khác biệt pop vs apply

Đang sửa dở nửa chừng thì sếp bảo fix bug gấp ở nhánh khác — commit thì chưa xong, bỏ thì mất. git stash cất thay đổi vào ngăn tạm để working tree sạch lại, làm việc khác rồi lấy ra tiếp. Bài này đo thật bằng git 2.39: stash bỏ qua file untracked (phải -u), apply giữ stash còn pop thì xóa, và bản chất stash là commit ẩn.

Công cụ 22/09/2026 5 phút

git worktree: một kho .git, nhiều thư mục làm việc song song

Cần code nhánh A mà vẫn build/test nhánh B cùng lúc? Stash làm mất ngữ cảnh, clone lại thì tốn dung lượng và tách rời kho. git worktree cho một .git dùng chung nhưng nhiều thư mục làm việc, mỗi cái ở một nhánh. Bài này đo thật: hai cây hai nhánh làm việc độc lập, commit ở cây này cây kia thấy ngay, và vì sao không checkout được cùng một nhánh ở hai cây.