Tôi cần trích xuất một thông báo 8 byte từ chuỗi có độ dài thay đổi nên tôi đang tìm một thuật toán mà tôi sẽ triển khai trong c/C++. Đó sẽ là một phần của một thủ tục chữ ký kỹ thuật số trên một vi điều khiển, vì vậy nó phải là:Thuật toán hàm băm 8 byte nhẹ
- ghi trong vài dòng mã, kể từ firmware phải được giữ càng ít càng tốt;
- mức tiêu thụ tài nguyên thấp, expecially ram (tốt hơn ít hơn 100 byte);
- đủ mạnh để thay đổi một ký tự đơn tại bất kỳ điểm nào của chuỗi sẽ thay đổi thông báo tổng thể.
Tôi đã xem xét các thuật toán hiện có như crc64 nhưng dường như chúng quá nặng đối với nền tảng của tôi.
Có nhiều hàm băm khả dụng (và dễ tìm). Các chức năng hiện tại nào đã nhìn "gần" mục tiêu mong muốn và tại sao? Nếu chúng không được chấp nhận, tại sao? Có một số kết quả tốt/đọc cho một "hàm băm" đơn giản - trung thực, chỉ có yêu cầu thứ ba được đăng tải về bất kỳ mối quan tâm nào. Ngoài ra, kể từ khi CRC đã được đề cập, là mục tiêu một [chung] * băm * hoặc * checksum *? –
Có lẽ điều này có thể hữu ích: http://en.wikipedia.org/wiki/List_of_hash_functions Có thể kiểm tra sphlib cũng như để làm rõ một cái gì đó 8 byte sẽ dẫn đến va chạm vì vậy điểm 3 của các yêu cầu của bạn không thể được thực hiện bởi BẤT K has băm thuật toán ít nhất không phải cho tất cả các chuỗi và 8 byte là khá thấp. –
@pst: Tôi đã tính đến một số hàm băm hiện có cung cấp đầu ra 64 bit, nhưng ví dụ crc64 cần nhiều hơn 100 byte ram. Như tôi đã nói trong câu hỏi, mục đích là để có được một thông điệp tiêu hóa, do đó, một chức năng mã hóa sẽ tốt hơn. Tuy nhiên, tôi cần nó nhẹ hơn mạnh mẽ, vì vậy tôi đã tính đến các loại hàm băm khác. – etuardu