PHP çok kısa bir dize şifrelemek için en iyi yolu nedir?

7 Cevap php

Ben potansiyel sadece üç ya da dört karakter olabilir ama yaklaşık yirmi karaktere çalıştırabilir dizelerini şifrelemek istiyorum. Bir müzakere fonksiyonu (md5, sha1, crypt, vb) Bir de bilgilerin şifresinin açılması mümkün istiyorum kadar uygun değildir. mcrypt uzatma olanakları iyice zor bir dizi var.

Herkes güvenli bir şekilde kısa dizelerini şifrelemek ve why için en iyi yolu hakkında herhangi bir fikir var mı? Herkes pratik şifreleme senaryolara rahat bir programcı tanıtan herhangi bir malzeme için herhangi bir bağlantıları var mı?

7 Cevap

Ben çok Chris Kite önerilerini öneririz. Eğer ne yaptığınızı hakkında daha fazla bilmeden, neden, ve AES-128 karşı korumak için ihtiyacı tahmin tehditler muhtemelen yeterlidir. Simetrik şifreleme kullanmak için yeteneği decryptor ve veri Şifreleyici hem de olacaktır bağımsız bir uygulama için mükemmeldir. Her iki Chris Kite ve Arachnid nedeniyle verilerin küçük boyutu bu ped veri ve rastgele bir Başlatmak Vector kullanmanız tavsiye ediyor, dediğim gibi.

Update: gelince neden .... veri kadar küçük, ve IV tahmin edilebilir, eğer sade-metin her kombinasyonu için şifreli metin üreterek düz metin kaba kuvvet mümkün Bilinen IV ve yakalanan şifre-metin o kadar uyan. Kısacası, bu gökkuşağı tabloları nasıl olduğunu.

Eğer tek bir sunucu üzerinde şifrelemek ve başka şifresini gidiyoruz Şimdi eğer ben pdavis önerileri ile gitmek istiyorum. Asimetrik bir yöntemi kullanarak şifre çözme tuşları şifreleme anahtarlarını ayırmak mümkün olacaktır. Verileri şifreler sunucu tehlikeye ise bu şekilde, saldırgan hala verilerin şifresini değiştiremiyor.

Eğer mümkün iseniz, şifreleme için kullanılması durumunda hakkında daha fazla bilgi için topluluk yardımcı olur. Ben güvenlik kontrollerini değerlendirirken makul tehditlere uygun bir anlayış anahtar olan, yukarıda da belirtildiği gibi.

Ben bir sunucuda şifrelenmiş ve daha sonra muhtemelen sunucu veya (genellikle benim böyledir) başka bir sunucuya ya şifresi gereken şey için GnuPG'yi kullanmak ister. Bu benim senaryoda şifreleyerek sunucu verilerin şifresini çözmek için anahtarı olmadığından ekstra bir güvenlik düzeyi sağlar. Ayrıca kolay manuel şifre çözme sağlar. Çeşitli diller için geçerli birkaç iyi ambalajlarını (başka avantajı) vardır, PHP için biridir GnuPGP PHP Class.

mcrypt varsayılan olarak en PHP inşa içine bağlantılıdır. İhtiyacınız olasıdır tüm ilkel içerir. Şifreleyip konum ne hakkında daha fazla bilmeden, bu kullanmak ne algoritma, çalışma modu, vb somut öneriler vermek zor ne tehdit modeli vb, konumdur.

Bir şey kesin olarak söyleyebiliriz: kısa metin dizeleri ile, benzersiz, rasgele Başlatma Vector ZORUNLU her zamankinden daha önemlidir. Birisi şifreli veri karşı çeşitli saldırıların mount Aksi halde, önemsiz bulunuyor.

Bir uygulama içinde verileri şifrelemek ve şifresini çözmek istiyorsanız, büyük olasılıkla bir simetrik anahtar şifreleme kullanmak istiyorum. Gizli veri güvenliğini sağlamak için NSA tarafından onaylı simetrik blok şifreleme algoritması olan AES, en iyi seçimdir. Saf-PHP uygulama www.phpaes.com mevcut olduğunu

AES128 yeterli gibi kullanmak için geliyor. Bir rasgele başlatma vektörü CBC modunu kullanmak isteyeceksiniz, ya da başka aynı veri hep aynı şifreli üretecek.

Doğru şifreleme algoritması seçimi iyi bir ilk adımdır, ama anahtar idaresi gibi doğru almak zor güvenli bir sistem için birçok faktör vardır. Böyle (ücretsiz online için kullanılabilir) Ross Anderson, Bruce Schneier tarafından Uygulamalı Kriptografi ve Güvenlik Mühendisliği olarak orada iyi kaynaklar vardır.

Sadece onu allak bullak etmeye çalışıyorsanız Does it matter if anybody can decrypt it? a little, rot13 kullanın. Onun eski okul.

Ben Chris Kite katılıyorum - sadece AES 128 kullanın, bu kadar yeterlidir.

Ben tam olarak çevreyi bilmiyorum, ama internet üzerinden bir şekilde veri aktarımı ediyoruz sanırım.

ECB kullanmayın, bu hep aynı düz metin için aynı sonucu üretecektir.

CBC modu gitmek ve bir rasgele başlatma vektörü unutma yoludur. Bu vektör şifre metin ile iletilmelidir ve açık olarak gönderilebilir.

AES blok şifreleme olduğu veri ile ilgili, sonuç her zaman blok boyutu bir katıdır. Eğer veri kısa veya uzun ise gözlemci bildirmek istemiyorsanız, beklenen maksimum boyutuna kadar uzatmak için bazı dolgu ekleyin.

Böyle Blowfish gibi herhangi bir tek yönlü şifreleme algoritması yapacağız sanırım. Blowfish, hızlı ve açıktır. Sen crypt () işlevi aracılığıyla Blowfish'i kullanabilirsiniz. AFAIK küçük dizeleri özellikle iyi çalışır şifreleme algoritması vardır. Olsa haberdar olmak için tek şey kaba zorlayarak böyle küçük dizeleri çok kolay olacak olmasıdır. Belki ek güvenlik için bir 'sır' tuz değeri ile birlikte dize şifrelemek gerekir.