2009-06-27 19 views
5

Có bất kỳ cơ hội nào mà hàm băm SHA-1 có thể thuần túy là số hay thuật toán đảm bảo rằng phải có ít nhất một ký tự chữ cái?Hàm băm SHA-1 có thể là số không?

Chỉnh sửa: Tôi đại diện cho nó ở cơ số 16, dưới dạng chuỗi được trả về bởi hàm sha1() của PHP.

Trả lời

15

về mặt kỹ thuật, hàm băm SHA1 là số, nó thường được mã hóa nhất trong cơ sở 16 (đó là những gì sha1() của PHP) để nó gần như luôn có một chữ cái trong đó. Mặc dù vậy, không có sự đảm bảo nào về điều này.

Các tỷ lệ cược của một hex mã hóa số 160 chút không có AF chữ số là (10/16) tương đương khoảng 6,84227766 × 10 -9

+0

Cảm ơn! Chính xác những gì tôi muốn biết. :) –

+1

Trong điều kiện dễ thấy hơn: Khoảng 1 trong mỗi 146.000.000 SHA1 được thể hiện trong thập lục phân không có chữ số cao hơn 9. –

+8

Ví dụ, hashlib.sha1 ('169977707'). Hexdigest() == '5938266572196464632409940308852871296620' –

1

Bạn có thể đại diện cho sản phẩm của SHA1 (giống như bất kỳ dữ liệu nhị phân) trong bất kỳ cơ sở nào bạn muốn. Cụ thể, bạn có thể mã hóa kết quả trong cơ sở-8/10.

3

Hàm băm SHA-1 là số 160 bit. Để dễ dàng viết nó, nó thường được viết bằng hệ thập lục phân. Các số thập lục phân (cơ số 16) là 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e và f. Không có gì đặc biệt về các chữ cái. Mỗi ký tự thập lục phân tương đương với 4 bit có nghĩa là băm có thể được viết bằng 40 ký tự.

Tôi không tin rằng có bất kỳ lý do gì mà hàm băm SHA-1 không thể có bất kỳ chữ cái nào, nhưng không thể xảy ra. Nó giống như tạo ra một số ngẫu nhiên 40 chữ số (cơ sở 10) và không nhận được bất kỳ số 7, 8 hoặc 9 nào.