Belirli klasörde zaten şifreli bir dosyayı bulmak için php nasıl

4 Cevap php

I am using PGP (GNU Privacy Guard) for encrypting the file. while encrypting i removed the '.pgp' extension of encrypted file.

Şimdi ben dosya zaten belirli bir klasöre şifreli olduğunu bilmek istiyorum nasıl bazı.

Note :- my goal is that ... do not encrypt any file twice ... so before encrypt any file .. i want to check is the file already encrypted.

php biz zaten şifrelenmiş hangi dosyayı öğrenebilirim?

4 Cevap

PGP dosyası tüm "----- ----- BEGIN PGP MESSAGE" ile başlar. Yani böyle bir şey yapabilirsiniz,

  $content = file_get_contents($filename);
  $encrypted = strpos($content,'-----BEGIN PGP MESSAGE-----') == 0;

Ben gerçekten nasıl çalıştığı hakkında çok şey bilmiyorum, ya da nasıl düzgün şifreli olup olmadığını söylemek için dosyanın içeriğine bakmak olabilir, ama bunları deşifre deneyebilirsiniz? Eğer sadece düz metin dosyaları ile çalışıyorsanız biliyorsanız, deşifre verilerin ilk 500 byte inceleyebilir ve tuhaf karakterler (AZ 0-9 + noktalama işaretleri, vs az standart dışında) varsa, o zaman bir ipucu olabilir dosya wasn't şifreli olduğunu.

Bu gerçekten ben biliyorum, bir yarım-kýçlý cevap, ama bir açıklama uyması için biraz uzun oldu.

Eğer şifreleme kullanılan algoritmayı anlayamıyorum sürece. Bunu anladığınızda, bir dosya zaten şifreli olup olmadığını denetlemek için bu uygulayabilirsiniz.

Ayrıca zaten bir şey şifrelenmiş ise kontrol için PGP kullanılabilir bir fonksiyon zaten orada olduğundan emin olmak için kontrol edin. Bu şifreleme çözeltilerde çoğunlukla mevcuttur.

Teşekkürler

Zırhlı OpenPGP veri, ikili ve ASCII için iki olası biçimleri vardır.

Ascii zırhlı dosyalar unix komutu kullanılarak da yapılabilir ki "----- ----- BEGIN PGP MESSAGE" bakarak tanımak kolaydır file:

$ file encrypted
encrypted: PGP message

Yalnızca ASCII zırhlı şifrelenmiş dosyaları ile uğraşıyoruz @ ZZ_Coders cevabı tamamen iyi.

Veya ikili formatta - bu başka bir şey ortaya çıkarsa, bu bir OpenPGP mesaj değil. Bu (en azından ben sizin için bakmak olabilir sihirli hangi paketlerin bilmiyorum) tanımak kadar kolay değil, ama kolayca dosyasını test etmek gpg komutunu kullanabilirsiniz:

$ gpg --list-only --list-packets encrypted
:pubkey enc packet: version 3, algo 1, keyid DEAFBEEFDEADBEEF
    data: [2048 bits]
:encrypted data packet:
    length: 73
    mdc_method: 2

Şifreli değilse, yanıt bu gibi görünecektir:

$ gpg --list-only --list-packets something_else
gpg: no valid OpenPGP data found.

PHP, bir dosya OpenPGP şifreli olup olmadığını kontrol etmek için bu kodu kullanabilirsiniz:

if (strpos(`gpg --list-only --list-packets my_file.txt 2>&1`,
           'encrypted data packet'))
  echo "encrypted file";