SORU
18 Aralık 2011, Pazar


KİMLİĞİ kafamı allak bullak

Bir şekilde/bir tamsayı bir tamsayı KİMLİĞİ karartmak şifrelemek için arıyorum. Daha doğrusu, bir fonksiyon ihtiyacım var int F(int x), böylece

  • x<->F(x) bire-bir yazışma x=! ( y, F(x)=! F(y))
  • F(x) verildiğinde, x kolay öğrenmek için - F karma bir fonksiyonu değildir
  • x ve F(x) bulmak için/zor F(y) verilmiş, x ^ 0x1234 gibi bir şey işe yaramaz

Açıklık getirmek için, güçlü bir şifreleme çözüm aramıyorum, sadece şaşırtmaca. example.com/profile/1, example.com/profile/2 vb gibi URL ile bir web uygulaması düşünün. Kendi profillerini olmayan gizli, ama isterim önlemek sıradan röntgenci görünüm/getir tüm profilleri de birbirlerini çok tercih ederim gizlemek arkalarında bir şey gibi example.com/profile/23423, example.com/profile/80980234 vb. Veritabanı saklı işi kolaylıkla yapabilir belirteçleri olmasına rağmen, bazı basit matematik Bu için kullanılabilir varsa merak ediyorum.

Hakkında net değildim önemli bir gereklilik sonuçları baksınlar "rastgele", yani bir sıra x,x 1,...,x n , F(x),F(x 1)...F(x n) verilen herhangi bir ilerleme şeklinde olmamalı.

CEVAP
18 Aralık 2011, Pazar


2 veya 3 basit yöntem: bazı kombinasyonu ile allak bullak

  • XOR
  • karışık tek tek parçalar
  • modüler gösterimine dönüştürmek (, Vol. D. Knuth 2, Bölüm 4.3.2)
  • 32 (veya 64) her alt bitlerini XOR bit alt üst üste (alt parite bit) seçin
  • uzunluğu değişken numerik sistem ve karışık basamağını temsil etmek
  • birbirlerine çarpma tersler (modül 2 . olan tek tamsayılar x y bir çift seçin ^sup>32), x y geri tarafından allak bullak ve çarpma çarpma, çarpım ile bölümünden kalan 2 ' dir32(kaynak: "A practical use of multiplicative inverses" by Eric Lippert)

Değişken uzunlukta numerik metod "ilerleme" kendi gereksinimi. size itaat etmez Her zaman kısa aritmetik ilerlemeler üretir. Ama başka bir yöntem ile kombine edildiğinde iyi sonuç verir.

Aynı modüler temsil yöntemi için de geçerlidir.

İşte bu yöntemlerden 3 C kod örneği. Shuffle bit örnek biraz farklı maskeler ve mesafeleri daha tahmin edilemez olması için kullanabilir. Diğer 2 örnek küçük sayılar için iyi (sadece fikir vermek için). Tüm tamsayı değerleri düzgün karartmak için genişletilmiş olmalıdır.

// *** Numberic system base: (4, 3, 5) -> (5, 3, 4)
// In real life all the bases multiplied should be near 2^32
unsigned y = x/15   ((x/5)%3)*4   (x%5)*12; // obfuscate
unsigned z = y/12   ((y/4)%3)*5   (y%4)*15; // restore

// *** Shuffle bits (method used here is described in D.Knuth's vol.4a chapter 7.1.3)
const unsigned mask1 = 0x00550055; const unsigned d1 = 7;
const unsigned mask2 = 0x0000cccc; const unsigned d2 = 14;

// Obfuscate
unsigned t = (x ^ (x >> d1)) & mask1;
unsigned u = x ^ t ^ (t << d1);
t = (u ^ (u  >> d2)) & mask2;
y = u ^ t ^ (t << d2);

// Restore
t = (y ^ (y >> d2)) & mask2;
u = y ^ t ^ (t << d2);
t = (u ^ (u >> d1)) & mask1;
z = u ^ t ^ (t << d1);

// *** Subset parity
t = (x ^ (x >> 1)) & 0x44444444;
u = (x ^ (x << 2)) & 0xcccccccc;
y = ((x & 0x88888888) >> 3) | (t >> 1) | u; // obfuscate

t = ((y & 0x11111111) << 3) | (((y & 0x11111111) << 2) ^ ((y & 0x22222222) << 1));
z = t | ((t >> 2) ^ ((y >> 2) & 0x33333333)); // restore

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Absolute Zero(Programming Tutorials)

    Absolute Zer

    22 Kasım 2012
  • GOTO Conferences

    GOTO Confere

    3 EKİM 2011
  • olinerd

    olinerd

    23 AĞUSTOS 2007