2010-04-21 27 views
1

我需要一個CRC機制來計算數量的字符串的CRC,使得在給定兩個串,,總和CRC(A)+ CRC(B) == crc(A + B)CRC函數

P.S. XOR太弱 - 算法對於逆向工程來說應該不是微不足道的。

+0

是什麼讓你「XOR太弱」?如果你提供更多的細節,有人可以提供一個很好的答案。 – Oded 2010-04-21 11:53:55

+2

我認爲只有微弱的校驗和才能滿足這個條件。 – 2010-04-21 11:54:07

+5

這裏「+」是什麼意思?作爲一個例子,你的意思是'CHECKSUM(「texthere」)+ CHECKSUM(「othertexthere」)應該產生與'CHECKSUM(「texthereothertext」)'相同的結果嗎?請澄清你的問題。 – 2010-04-21 12:50:35

回答

1

我不認爲任何校驗和將填補這種情況。 (CRC(A))== const(CRC codomain是一個有限集合,const == size(max_checksum))。所以如果你有消息B的CRC(B)== max_checksum,那麼對於任何其他消息大小(CRC(B))+大小(CRC(C))> const(來自CRC(B)+ CRC(C)> max_checksum)。

或者換句話說,沒有滿足要求的CRC功能。

編輯:

但是,如果你的意思是你要能夠確定兩個消息一起了解包括個人信息的CRC的CRC,是的,這是有可能它是由rsync用於例如,它被稱爲rolling hash

+0

一個簡單的XOR總和會。 – 2010-04-21 12:26:12

+0

@亨克,是的,但這不是+,這是異或:) - 要求指定它應該是+ – Unreason 2010-04-21 12:28:08

+1

我認爲'+'意思是'結合'在這裏。 – 2010-04-21 14:28:09

3

考慮到您所需的條件,在RHS上使用+表示字符串連接,在LHS上使用整數加法,任何字符串的校驗和將是其各個字符的校驗和的總和。所有這些校驗和都是同構的[*],唯一的可調參數就是您分配給每個單個字符的值。

如果XOR太弱,那麼我懷疑任何這樣的線性校驗和是否足夠強。

如果+意味着什麼都在你要求的條件,也許你可以指定哪些...

[*]好了,東西-的Morphic。

1

Homomorphic hashing接近你要求的,但我不知道一個適用於字符串contactenation,而不是數學運算。所有已知的同態散列函數也很荒謬。

我會推測它甚至可能無法創建具有此屬性的安全哈希函數。