Đối với dữ liệu vô nghĩa, các hàm băm thời gian cộng với một muối luôn chắc chắn và không thể đoán được dễ dàng (tha thứ cho Python, tôi đã nghe nói của thứ Ruby này nhưng tôi chưa bao giờ cầm nó trên tay):
>>> hashlib.md5(str(time.time()) + "!salt!").hexdigest()
'7a8b73fa7e0dadf246612e6001ede165'
Hãy rút ngắn nó, nếu bạn thích:
>>> hashlib.md5(str(time.time()) + "!salt!").hexdigest()[:16]
'46ffb69ebc96412d'
Thay vào đó, hãy sử dụng một số nguyên, nếu bạn thích, nhưng độ dài có thể thay đổi theo mã này, trừ khi bạn không có dấu đệm:
>>> int(hashlib.md5(str(time.time()) + "!salt!").hexdigest()[:13], 16)
1346212029197308
Trước "zomg md5 không an toàn bằng tiền điện tử":
>>> int(hashlib.sha256(str(time.time()) + "!salt!").hexdigest()[:13], 16)
1948411134966366
Chết tiệt, bạn thậm chí không cần phải sử dụng thời gian, bạn có thể sử dụng một số nguyên tự động cộng gộp, miễn là bạn muối nó:
>>> int(hashlib.sha256(str(1) + "!salt!").hexdigest()[:13], 16)
1269883740611281
>>> int(hashlib.sha256(str(2) + "!salt!").hexdigest()[:13], 16)
3655373802716929
Băm. Có điều gì họ không thể làm gì?