Kümülatif sağlamalarını

5 Cevap php

SO (EDIT: Incremental Checksums) aşağıdaki özelliği destekleyen bazı sağlama algoritmaları (Ben onlardan biri Adler32 olduğunu düşünüyorum) olduğunu burada daha önce okudum:

adler32('abc'); // 123
adler32('def'); // 456
adler32('abcdef'); // 579 (123 + 456)

Sonuçlar Ben arşivlemiştik istediklerini göstermek için sadece örnek olduğunu unutmayınız. Ben adler ve Fletcher modülleri ile PHP karma uzantılı bazı örnekler denedim ama değerler eklemek için görünmüyor. Birisi bana bazı uygulama örnekleri gösterebilir miyim?

5 Cevap

Ne arıyorsun şekilde dizeleri üzerinde bir hash fonksiyonu ise hash(s1+s2) = hash(s1) + hash(s2), ben tüm fonksiyonlar sabit bir fonksiyonu {için forma (sum of the hash_char(c) for all the chars c in the string), vardır bu özelliği ile karma eminim [(2)]}.

Bu çok iyi bir karma işlev için yapmaz. Eğer Adler32 hakkında ne gördüm misremember musunuz?

Ben yanlış sürece ben bu çarpışmalar gereksiz bir numarası olmadan nasıl mümkün olduğunu görmüyorum.

hash('cde') => 345 
hash('aaabcd') => 345

Adler32 bir sağlama algoritması ziyade bir karma olduğunu ve açıklamak özelliği yok.

Bu sağlamalarının karma devlet karma sonucu ile tarif edilebilir özelliği olması için oldukça yaygındır, eğer öyleyse

H ("aaa") = G (H0, "aaa")

G karma karma ve birleştirme işlevi olduğunu ve H0 bir başlangıç ​​değeri olduğu, genellikle sıfır. O zaman

H ( "aaa" ) = G ( H("aa"), "a" ) = G ( G ( H("a"), "a" ), "a" ) = G ( G ( G ( H0, "a" ), "a" ), "a" )

Ama sadece o tüm permütasyon için çarpışacak (G (x. Concat. Y) = G (x) + G (y) sizin kural ima ettiği gibi) birlikte giriş karakterler bazı fonksiyon ekleyen bir fonksiyon girdi.

Böyle bir fonksiyon, bir ASCII girişi 128 bit hash oluşturabilirsiniz:

H(x) = sum ( b => 1 << b foreach byte b in x )

özelliğine sahip olur bu da

H("abcdef") == H("abc") + H("def") 
            == H("a") + H("b") + H("c") + H("d") + H("e") + H("f") 
            == H("abcdfe")
            == H("abcfde")
            == H("abcfed")
 etc.

Adler32 is not a hash function.
There are no good hash functions with this property.

There are, however, encryption functions with a similar property; known as homomorphism.
Basically:

E(text1)*E(text2)=cipher  
D(cipher) = text1 + text2

E şifreleme fonksiyonu olduğu, D şifreleme fonksiyonu ve metinler (bir sayı olarak seri veya veri) sayılardır. Not + & dışındaki işlemleri kullanarak düzenleri * Biri yok.

İki örnek şemaları: ElGamal ve Paillier. Hem asimetrik şifreleme düzenleri ortak bir özelliği olan, slow vardır. Bu örneklerden ikisi de * kullanmak & +.

Alder32 algoritma tanımı ışığında, ben string birleştirme ile ilgili tarif özelliği nasıl mümkün olduğunu görmüyorum.

Edit:, bir karma için böyle bir özellik imkansız olduğunu kusurlu demo kaldırıldı. Gerçekten de böyle bir karma bir örnek sadece ekler biri (belki de büyük bir sayı modulo, ama anlaşılabilir) giriş karakterlerin ASCII değer. (Benim bu hatayı işaret size Pete Kirkham ederiz).

Aksine Alder32 daha size homomorphic encryption algoritmaları atıfta olabilir. Bu tür şifreleme programları listesini bulabilirsiniz here. Craig Gentry, IBM bir araştırma, aynı zamanda fully homomorphic encryption üreten onun başarısını duyurdu, ancak herhangi bir teknik detaylar (Bu MEZUNLARI, büyük bir haber olurdu) bu zamanda yayınlandı olsaydı ben bilmiyorum.