Wednesday, 28 October 2015

[crypto] md5, sha, bit, byte, và hex

8 bits = 1 byte
1 byte biểu diễn được 2^8 = 256 "ký tự"
4 bits biểu diễn được 2^4 = 16 "ký tự".

Một ký tự thuộc hệ hexadecimal (hệ số 16) là một ký tự trong khoảng: 0123456789abcdef
Vậy chỉ cần 4 bits là có thể biểu diễn 1 ký tự hex, 2 ký tự hex = 1 byte

MD5 là gì?
MD5 là tên một thuật toán hash được sử dụng rộng rãi, được định nghĩa đầy đủ trong rfc1321.
Thuật toán hash hiểu nôm na là thuật toán nhận 1 đầu vào thì sẽ cho ra 1 kết quả duy nhất, 2 đầu vào khác nhau sẽ phải cho ra 2 đầu ra khác nhau.
nhận đầu vào có kích thước tuỳ ý nhưng trả về đầu ra với kích thước cố định. Các hàm hash dùng trong bảo mật thường có thêm tính chất: với 2 đầu vào khác nhau sẽ luôn cho ra 2 đầu ra khác nhau.
Giá trị được trả về bởi hash function gọi là "hash value", "hash codes", "hash sums", hay "hash".

Ví dụ:
$ printf "familug" | md5sum
b2bc686c91b99bd9cd92e70cdeaadf40  -
$ printf "FAMILUG" | md5sum
60e29026b93e27f815e73123efedad31  -
$ printf "FAMILUG" | md5sum | cut -d' ' -f1 | tr -d '\n' | wc -c
32
Ví dụ trên cho thấy giá trị MD5 của 2 string khác nhau là khác nhau, mã MD5 (MD5 checksum) có độ dài là 32 ký tự.
Chú ý các ký tự này đều trong khoảng [0-9a-f] tức đều là biểu diễn dạng hexadecimal của giá trị ẩn dưới đó.

Friday, 16 October 2015

[Golang] gofmt và sắp xếp import package

câu lệnh ``gofmt`` (đọc là gâu-phằm) sẽ tự động sắp xếp import, format code của file đầu vào, và in ra màn hình code đã được format theo tiêu chuẩn của Golang.

Nếu để các dòng import liền nhau, gofmt sẽ sắp xếp chúng theo thứ tự alphabetical.
Để tách riêng các standard package với các external package, phân cách chúng bởi 1 dòng trắng. Hai cụm import sẽ được gofmt sắp xếp riêng.

Ví dụ:
import (
    "encoding/json"
    "fmt"
    "net"
    "net/http"

    recover_mw "git.familug.org/hvn/golib/echo/recover"
    log "github.com/Sirupsen/logrus"
    logmw "github.com/deoxxa/echo-logrus"
    "github.com/labstack/echo"
)
Cũng có thể dùng goimports để sắp xếp với logic tương tự mà không cần dòng trắng, nhưng đôi khi
goimports tỏ ra quá thông minh và đã có lần tự import https://github.com/cockroachdb/cockroach/tree/421dcbbfe645eab4b49f682eabf69d98d36e50b7/util/log thay vì "log".

Wednesday, 14 October 2015

Học Python tại Hà Nội

Tiếp nối thành công 2 khoá PyFML01 và PyFML02, khoá PyFML03 đã được mở.
Xem thông tin chi tiết tại: https://gist.github.com/hvnsweeting/4112374900ef17411f44
Buổi học tới sẽ bắt đầu lúc 19h thứ 5 ngày 15 tháng 10 năm 2015.
Vui lòng đăng ký ngay để biết thêm chi tiết.
Page Facebook: https://www.facebook.com/pyfml
Hết.

Friday, 9 October 2015

Mirroring apt repository với apt-mirror

Mirror trong tiếng Việt, dạng danh từ là cái gương, dạng động từ là "phản chiếu".
Trong IT, mirror có nghĩa là giữ một bản copy nội dung của 1 site tại một site khác, nôm na là tạo bản copy.
Đây là một kỹ năng có thể nắm bắt trong 10 phút và dùng cả đời :D

Keyword
mirror /ˈmɪrə/ Việt sub: mí-rơ



apt repository là nơi chứa các package để cài đặt một phần mềm cho các hệ điều hành sử dụng apt (debian, ubuntu...).
Ví dụ apt repository của postgresql: http://www.postgresql.org/download/linux/ubuntu/

Vì sao phải mirror?