Saya ingin crypt dan mendekripsi satu file menggunakan satu kata sandi.
Bagaimana saya bisa menggunakan OpenSSL untuk melakukan itu?
encryption
openssl
aF.
sumber
sumber
PKCS5_PBKDF2_HMAC
. Anda harus menggunakanEVP_*
fungsi untuk mengenkripsi dan mendekripsi. Lihat Enkripsi dan Dekripsi Simetri EVP pada wiki OpenSSL. Bahkan, Anda mungkin harus menggunakan enkripsi dikonfirmasi karena memberikan baik kerahasiaan dan keaslian. Lihat Enkripsi dan Dekripsi terotentikasi EVP pada wiki OpenSSL.Jawaban:
Enkripsi:
Dekripsi:
Lebih detail tentang berbagai bendera
sumber
-md sha256
perintah encode dan decode Anda jika Anda berencana menggunakan file ini di komputer lain. Itu seharusnya melindungi Anda dari ketidaksesuaian / perbedaan versi OpenSSLJawaban singkat:
Anda mungkin ingin menggunakan
gpg
daripadaopenssl
melihat "Catatan Tambahan" di akhir jawaban ini. Tetapi untuk menjawab pertanyaan menggunakanopenssl
:Untuk Mengenkripsi:
Untuk Mendekripsi:
Catatan: Anda akan dimintai kata sandi saat mengenkripsi atau mendekripsi.
Jawaban panjang:
Sumber informasi terbaik Anda
openssl enc
mungkin adalah: https://www.openssl.org/docs/man1.1.1/man1/enc.htmlBaris perintah:
openssl enc
mengambil bentuk berikut:Penjelasan parameter paling berguna sehubungan dengan pertanyaan Anda:
Catatan tambahan:
Meskipun Anda secara khusus bertanya tentang OpenSSL, Anda mungkin ingin mempertimbangkan untuk menggunakan GPG sebagai ganti enkripsi berdasarkan artikel ini OpenSSL vs GPG untuk mengenkripsi cadangan di luar situs?
Untuk menggunakan GPG untuk melakukan hal yang sama Anda akan menggunakan perintah berikut:
Untuk Mengenkripsi:
Untuk Mendekripsi:
Catatan: Anda akan dimintai kata sandi saat mengenkripsi atau mendekripsi.
sumber
gpg
membiarkan saya mendekripsi file tanpa diminta kata sandi. Sepertinya kata sandi disimpan untuk jangka waktu tertentu, yang tidak saya inginkan.--no-symkey-cache
menonaktifkan caching saat menggunakan gpg--symmetric
, bahkan jika agen sedang berjalan.Enkripsi:
Dekripsi:
Untuk detailnya, lihat
openssl(1)
dokumen.sumber
-k symmetrickey
dengan-pass stdin
atau-pass 'pass:PASSWORD'
-k symmetrickey
itu menyesatkan. The-k
opsi digunakan untuk menentukan password, dari mana OpenSSL berasal kunci simetrik. Jika Anda ingin menentukan kunci simetris, Anda harus menggunakan-K
opsi.JANGAN GUNAKAN DERIVASI KUNCI OPENSSL DEFAULT.
Saat ini jawaban yang diterima memanfaatkannya dan tidak lagi direkomendasikan dan aman.
Sangat mungkin bagi seorang penyerang untuk secara kasar memaksa kunci.
https://www.ietf.org/rfc/rfc2898.txt
Melakukan hal ini:
openssl enc -aes-256-cbc -pbkdf2 -iter 20000 -in hello -out hello.enc -k meow
openssl enc -d -aes-256-cbc -pbkdf2 -iter 20000 -in hello.enc -out hello.out
Catatan : Iterasi dalam dekripsi harus sama dengan iterasi dalam enkripsi.
Iterasi harus minimal 10.000. Berikut ini adalah jawaban yang bagus tentang jumlah iterasi: https://security.stackexchange.com/a/3993
Juga ... kita punya cukup banyak orang di sini merekomendasikan GPG. Baca pertanyaannya.
sumber
Untuk Mengenkripsi:
Untuk Mendekripsi:
bf === Blowfish dalam mode CBC
sumber
Perbarui menggunakan kunci publik yang dibuat secara acak.
Encypt:
Dekripsi:
Saya memiliki tutorial lengkap tentang ini di http://bigthinkingapplied.com/key-based-encryption-using-openssl/
sumber
Perhatikan bahwa OpenSSL CLI menggunakan algoritma non-standar yang lemah untuk mengubah frasa sandi menjadi kunci, dan menginstal hasil GPG dalam berbagai file yang ditambahkan ke direktori home Anda dan proses latar belakang agen gpg berjalan. Jika Anda ingin portabilitas dan kontrol maksimum dengan alat yang ada, Anda dapat menggunakan PHP atau Python untuk mengakses API tingkat lebih rendah dan langsung memasukkan Kunci AES dan IV penuh.
Contoh permohonan PHP melalui Bash:
Output ini:
Anda juga bisa menggunakan
openssl_pbkdf2
fungsi PHP untuk mengonversi kata sandi menjadi kunci dengan aman.sumber
Ada program open source yang saya temukan online menggunakan openssl untuk mengenkripsi dan mendekripsi file. Ini dilakukan dengan satu kata sandi. Hal yang hebat tentang skrip open source ini adalah ia menghapus file asli yang tidak dienkripsi dengan merobek-robek file. Tetapi hal yang berbahaya tentang adalah begitu file asli yang tidak terenkripsi hilang, Anda harus memastikan Anda mengingat kata sandi Anda jika tidak mereka tidak akan bisa mendekripsi file Anda.
Di sini tautannya ada di github
https://github.com/EgbieAnderson1/linux_file_encryptor/blob/master/file_encrypt.py
sumber
Seperti disebutkan dalam jawaban lain, versi openssl sebelumnya menggunakan fungsi derivasi kunci yang lemah untuk memperoleh kunci enkripsi AES dari kata sandi. Namun, openssl v1.1.1 mendukung fungsi derivasi kunci yang lebih kuat, di mana kunci tersebut berasal dari kata sandi yang digunakan
pbkdf2
dengan garam yang dibuat secara acak, dan beberapa iterasi hashing sha256 (10.000 secara default).Untuk mengenkripsi file:
Untuk mendekripsi file:
sumber
Komentar tambahan untuk mti2935 jawaban yang bagus.
Tampaknya semakin tinggi iterasi maka perlindungan yang lebih baik terhadap brute force, dan Anda harus menggunakan iterasi yang tinggi karena Anda mampu dengan kinerja / sumber daya yang bijaksana.
Pada Intel i3-7100 lama saya mengenkripsi file yang agak besar 1.5GB:
Tidak ada bedanya, tidak memeriksa penggunaan memori (?)
Dengan GPU hari ini, dan bahkan hari esok yang lebih cepat, saya kira miliar iterasi kasar tampaknya mungkin setiap detik.
12 tahun yang lalu
NVIDIA GeForce 8800 Ultra
bisa mengulangi lebih dari 200.000 juta / detik iterasi (MD5 hashing)sumber: Ainane-Barrett-Johnson-Vivar-OpenSSL.pdf
sumber