AES ile bir dosyayı hızlıca nasıl şifreleyebilirim?


81

AES-256 kullanarak bir dosyayı şifrelemek istiyorum. Bunu hızlı ve kolay bir şekilde nasıl yapabilirim ve nasıl - veya başka biri - tekrar şifresini çözebilir miyim?

Yanıtlar:


86

Ne yazık ki, eşyalarınızı güvenceye almak için kolay bir çözüm yok. Kullanım durumunuzu düşünün, belki düz AES'ten başka bir şey daha uygun olabilir.


Çok basit bir platform bağımsız şifreleme istiyorsanız, openssl kullanabilirsiniz .

Lütfen dikkat: Bunu doğum günü-hediye-fikirleri.txt dosyasını oda arkadaşınızdan gizlemek için kullanabilirsiniz, ancak kararlı bir saldırgana karşı güvenli olmasını beklemeyin!

  1. Yorumlarda da belirtildiği gibi, bu yöntem bir saf anahtar türetme işlevi kullanır, bu nedenle, güvenli olma şansını elde etmek için şifrenizin süper derecede iyi olması gerekir.
  2. Ek olarak, bu yöntem şifreli metnin kimliğini doğrulamaz; bu, bir saldırganın siz fark etmeden içeriği değiştirebileceği veya bozabileceği anlamına gelir.
  3. Birçok güvenlik türü için şifreleme yeterli değildir (örneğin, güvenli bir şekilde iletişim kurmak için şifrelemeyi kullanamazsınız)

Hala openssl kullanmak istiyorsan:

  • Şifreleme:

    openssl aes-256-cbc -in attack-plan.txt -out message.enc

  • Şifre çözme:

    openssl aes-256-cbc -d -in message.enc -out plain-text.txt

Hem şifreleme hem de şifre çözme base64işlevini kullanarak iletiyi kodlamak için openssl komutunu alabilirsiniz -a. Bu şekilde, örneğin şifreli metni bir e-posta iletisine yapıştırabilirsiniz. Bu gibi görünecek:

stefano:~$ openssl aes-256-cbc -in attack-plan.txt -a
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
U2FsdGVkX192dXI7yHGs/4Ed+xEC3ejXFINKO6Hufnc=

Seçeceğiniz şifre ve çalışma modları olduğuna dikkat edin. Normal kullanım için CBC modunda aes 256'yı tavsiye ederim. Bunlar, sahip olduğunuz şifreleme modlarıdır (sadece AES sayıyor):

aes-128-cbc ← this is okay
aes-128-ecb
aes-192-cbc
aes-192-ecb
aes-256-cbc ← this is recommended
aes-256-ecb

Ayrıca bakınız:

Lütfen aklınızda bulundurun:

OpenSSL sizden bir şifre isteyecektir. Bu bir şifreleme anahtarı değil, 32 bayt ile sınırlı değil! Dosyaları başka biriyle aktaracaksanız, paylaşılan sırrınız çok güçlü olmalıdır. Şifrenizin ne kadar iyi olduğunu anlamak için bu siteyi kullanabilirsiniz:

Uyarı: Bu sitelerin şifrenizi sunucuya göndermediğini kontrol ettim, ancak bu herhangi bir zamanda değişebilir. Bu siteleri dev tools / inspector ile kullanın ve güçlü şifrenizi yazmadan önce herhangi bir şey gönderip göndermediklerini kontrol edin.


9
openssl aes-256-cbcdaha kısa openssl enc -aes-256-cbcve çok çalışıyor. Bunun için manuel sayfa çalıştırılarak kullanılabilir man enc. Asla ecbtemperlenmemiş veriler için kullanmayın , daima kullanın cbc. -saltvarsayılan olduğundan beri gereksiz. Eğer ihmal ederseniz -out filename, çıktı sadece verileri analiz etmeniz gerekiyorsa diske yazmanız gerekmeyen standart çıktıya yazılacaktır. Bir sonraki komut düz metin için satırı Cound gösterilmektedir: openssl aes-256-cbc -d -in filename | wc -l. (başka bir kullanım, bir dosyayı okuma: openssl aes-256-cbc -d -in filename | less)
Lekensteyn

1
Neredeyse tam olarak bunu bir komut dosyasında kullanıyorum: /usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc Beklediğiniz gibi tam tersi.
Belacqua

1
AES 256'yı AES 128'i tercih etmek için hiçbir sebep yoktur. @Lekensteyn Hiçbir zaman gizli veriler için ECB kullanmayın - temelde ECB asla kullanılmamalıdır (sadece uzmanlar için: ECB çok özel durumlar dışında asla kullanılmamalıdır). Daha genel olarak, opensslkomut satırı aracı çoğunlukla OpenSSL kütüphanesini test etmek için bir kavram kanıtıdır. Bu sorunun doğru cevabı GPG veya 7z gibi bazı arşivleyicilerdir .
Gilles,

1
Eklemek isterim ki openssl enc, zayıf bir parolanız varsa o kadar da güvenli değildir. Daha önce belirli bir kullanım önerdim openssl enc, ancak şimdi gpgbir KDF kullandığından daha iyi bir şekilde kullanmasını önerdim. Bu cevaba bakınız .
Lekensteyn

2
-1 Düşük seviyeli OpenSSL kullanımını önermek için. Herhangi bir HMAC işlevselliği sağlamaz ve @ Lekensteyn'in işaret ettiği gibi uygun KDF'den yoksundur.
gertvdijk

26

gpgKomutu kullanmayı seviyorum :

şifrele:

gpg --cipher-algo AES256 --symmetric filename.tar.gz

Kısa gösterim:

gpg --cipher-algo AES256 -c filename.tar.gz

Bu bir parola isteyecektir.

azalmak:

gpg --output filename.tar.gz --decrypt filename.tar.gz.gpg

Kısa gösterim:

gpg -o filename.tar.gz -d filename.tar.gz.gpg

AES256'yı varsayılan yapmak cipher-algo AES256için ayrıca ekleyebilirsiniz ~/.gnupg/gpg.conf. ( Manpage göre CAST5 )


Ayrıca kullanabilirsiniz AES(AES-128 anlamına gelir). AES-128 biraz daha hızlı ve daha az güvenli değil.
Gilles

2
+1. Ayrıca, GnuPG'nin, AES kullanırken (OpenSSL'nin yazma sırasındaki en çok cevaplanan cevaptan yoksun olduğu) sizin için mesaj doğrulama (HMAC) sağladığını da unutmayın. Arka plan bilgisi: superuser.com/a/633716/157409
gertvdijk

gpgŞifrenin önbelleğe alınmasını nasıl önleyebilirim ?
user76284,

16

7z ( şifre seçeneği kullanıldığında), 256bit AES şifrelemesi kullanır (SHA256 anahtar germe ile ).

Kur ( p7zip-full), şifrelemek istediğiniz bir dosyaya veya dizine sağ tıklayın ve Sıkıştır , .7z ve Diğer seçenekler / Parola'yı seçin .

görüntü tanımını buraya girin

Şifre çözme için, .7z dosyasına sağ tıklayın ve Buraya Ayıkla'yı seçin .


1
GUI'yi 7z için nasıl başlatırsınız?
m0skit0

4

aescrypt

Bağlantılı web sitesi açık kaynaklı bir 256-bit aes şifreleme / şifre çözme aracı içerir ve çok platformludur - MacO'lar, Windows, Linux ve diğerleri Java ile.

şifrele: aescrypt -e <file>

azalmak: aescrypt -d <file>

Sözdizimini kullanarak giriş klasörünüzü yedekleyebilir ve şifreleyebilirsiniz:

tar -cvf - /home/<home_folder> | aescrypt -e -p <password_message> - > backup.tar.aes

Ubuntu yükleme

Kaynağı indirin ve çıkarın

make
sudo make install

diğer platformlar

İkili dosyaları veya kaynak kodunu web sitesinden indirin.


3

Yapmış olacağım önerilerin birçoğu bu konuya çoktan eklenmiştir. Temelde openssl gerçekten bir dosyayı veya betiği şifrelemenin en kolay yoludur. Ancak, bazı platformlarda openssl'nin tüm sürümlerinde bulunmadığından AES-256'yı kullanmamaya dikkat ederim . En yeni işletim sistemleri ... yani Linux'ta var. Ancak AIX 5.3 gibi diğerleri bunu yapmaz (bence HP-UX de). Dosyanızı veya komut dosyanızı farklı platformlarda kullanmayı düşünüyorsanız, AES-128 kullanmanızı şiddetle tavsiye ederim, çünkü her yerde kullanılabilir.

AES-128 kullanarak bir dosyayı nasıl "hızlı ve kolay" şifreleyebilirsiniz?

Www.ShellScrypt.com gibi bir site , kabuk komut dosyalarını şifrelemek için oldukça yoğun olarak AES-128 openssl kullanır ve ardından komut dosyalarının şifrelenmiş kopyalarını çalıştırılabilir hale getirir. Yapmanız gereken tek şey betiği siteye yapıştırmak ve sizin için bir zip dosyası oluşturulur. Bu zip dosyası, dosyanızın şifreli (ve bir komut dosyasıysa çalıştırılabilir) sürümünü içerecektir. Bu, betiği kullanmak istediğiniz her sistemde herhangi bir paket veya modül gereksinimini karşılamak zorunda kalmadan veya bir dosyayı / betiği openssl komutlarının karmaşık ve kafa karıştırıcı teşviklerini çalıştırmaya çalışmak zorunda kalmadan " kolayca " ve " rahatça " şifrelemenizi sağlar.

Aşağıda AES-128'i kullanan temel bir şifreleme / şifre çözme openssl komutu verilmiştir:

test@test-VirtualBox:~$ 
test@test-VirtualBox:~$ echo precious-content | openssl aes-128-cbc -a -salt -k mypassword
U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z
test@test-VirtualBox:~$
test@test-VirtualBox:~$ echo U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z | openssl aes-128-cbc -a -d -salt -k mypassword
precious-content
test@test-VirtualBox:~$ 
test@test-VirtualBox:~$

2
Sadece “shellscrypt.com” un aşağı yukarı çıktığına dair bir yorum yapmak için bir yorum bırakarak (aka: site gitti).
e-sushi

1

Stefano Palazzo'nun cevabını ekleyerek, base64 komutuna benzer şekilde çalışan küçük bir bash işlevi yarattım.

Aes256 bir dosyayı şifreleyecek ve ardından base64 onu kodlayacaktır. Tersini yaparken, şifresini çözecek, şifresini çözecek ve ardından orijinal düz metnin tükürecektir.

aes256() {
  decodeMe=""
  isPipe="$([ ! -t 0 ] && echo "true" || echo "false")"

  if [ "$1" = '-d' ] || [ "$1" = '--decode' ]; then
    decodeMe="-d"
    shift
  fi

  if [ "$isPipe" = "true" ]; then
    read input
    printf '%s\n' "$input" | openssl aes-256-cbc -a $decodeMe
    exitCode="$?"
  else
    openssl aes-256-cbc -a $decodeMe -in "$*"
    exitCode="$?"
  fi

  unset isPipe decodeMe input
  return "$exitCode"
}

Kullanımı:

echo "my string" | aes256
# enter aes-256-cbc encryption password
# Returns: U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=

echo "U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=" | aes256 -d
# enter aes-256-cbc decryption password
# Returns: my string

aes256 file.plain > file.crypt
# enter aes-256-cbc encryption password

aes256 -d file.crypt
# enter aes-256-cbc decryption password
# Spits out original unencrypted file.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.