雜湊函式的輸出結果為什麼長度是固定的?

時間 2021-05-11 20:40:35

1樓:玄星

僅拋磚引玉。

其實很多cryptographer更希望要乙個只要改變配置就能把任意物件對映到想要的、有限大小的集合裡的元素的hash。長度固定只是乙個表象,重點在於對映到乙個有限集合裡,方便做下一步操作。

比如ECDSA和Schnorr簽名要求先把待簽名訊息對映到和群階數相關的整數群裡,而BLS要求對映到乙個EC點群裡。而用在PSI的cockoo hash則需要把元素對映到某個位置範圍裡。集合有限,所以可以用有限長度表示。

話說我還記得這種壓縮函式(compression function)或者摘要函式(message digest function)一開始是因為這種從無限到有限的性質, 和做儲存位置對映的hash類似,才被一起都叫hash。不是因為叫hash所以有限。

2樓:王傑

hash演算法就是這麼做的唄,輸出長度一樣有很多好處啊,便於記錄、傳輸啥的。hash就是把輸入資料經過一通複雜的處理後得到乙個固定長度的亂碼輸出。

輸入是任意長度,輸出長度固定,顯然輸入與輸出不可能一一對映,必然會出現兩個不同的輸入對映到同乙個輸出,稱為hash碰撞,輸入空間越大,hash碰撞概率也更大。但是由於輸出空間本身也很大,而且hash演算法處理過程複雜,找到兩個不同的輸入對映到同乙個輸出還是比較困難的,這是hash安全性的保證。所以hash演算法雖然不是一一對映,但仍具有實用價值。

3樓:0xFE

不同的演算法有不同的輸出結果位數,一樣的演算法,不同的內容都可以根據演算法內容進行摘要處理,位數是演算法設計者決定的。就像不同的人身份證為啥都是一樣的位數呢?

java陣列輸出結果為什麼是這個

賀小五 你這是取出了二維陣列裡面的陣列。就像你有乙個大箱子,大箱子裡面放著很多小箱子,小箱子裡面放的才是你要的資料。int sz new int,最外層的花括號就是就是一排大箱子 裡面的花括號就是小箱子 4,2,8,1就是第乙個小箱子裡面的資料 System.out.println sz 1 就是列...

為什麼 C 語言的輸入輸出函式比 C 的輸入輸出流要快?

nolanzz 用流輸出的話,貌似用cerr會比cout更快一些 提醒使用std ios sync with stdio false 這個會導致流讀寫和標準讀寫不能混用,oj上讀寫會出現問題,我本地使用clang貌似沒有問題 cin cout這些不能和scnaf printf這些一起用 Isaac ...

為什麼被積函式大於零,積分結果就大於零?

薛丁格的貓 注 我也不確定我的證明是否嚴謹 因此還請讀者自行判斷 如下圖所用到的四個鏈結在這統一羅列出來 定積分不等式性質1 閉區間可積必有界 可積準則1 達布和性質4 答疑貓 我們取以下的集合 顯然 如果對於每個 均有 那麼可數個集合的並 的測度也為0,這和 矛盾,因此存在 使得 0 eeimg ...