Hoe OpenSSL gebruiken om bestanden te coderen/decoderen?

Ik wil één bestand versleutelen en ontsleutelen met één wachtwoord.

Hoe kan ik OpenSSL daarvoor gebruiken?


Antwoord 1, autoriteit 100%

Beveiligingswaarschuwing: AES-256-CBC biedt geen geverifieerde codering en is kwetsbaar voor padding orakelaanvallen. Gebruik in plaats daarvan iets als age.

Versleutelen:

openssl aes-256-cbc -a -salt -in secrets.txt -out secrets.txt.enc

Decoderen:

openssl aes-256-cbc -d -a -in secrets.txt.enc -out secrets.txt.new

Meer details over de verschillende vlaggen


Antwoord 2, autoriteit 63%

Kort antwoord:

U wilt waarschijnlijk gpg gebruiken in plaats van openssl, dus zie “Aanvullende opmerkingen” aan het einde van dit antwoord. Maar om de vraag te beantwoorden met openssl:

Versleutelen:

openssl enc -aes-256-cbc -in un_encrypted.data -out encrypted.data

Ontsleutelen:

openssl enc -d -aes-256-cbc -in encrypted.data -out un_encrypted.data

Opmerking: u wordt om een ​​wachtwoord gevraagd bij het versleutelen of ontsleutelen.


Lang antwoord:

Uw beste informatiebron voor openssl enc is waarschijnlijk: https://www.openssl.org/docs/man1.1.1/man1/enc.html

Opdrachtregel:
openssl enc heeft de volgende vorm:

openssl enc -ciphername [-in filename] [-out filename] [-pass arg]
[-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] 
[-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P] 
[-bufsize number] [-nopad] [-debug] [-none] [-engine id]

Uitleg van de meest bruikbare parameters met betrekking tot uw vraag:

-e
    Encrypt the input data: this is the default.
-d    
    Decrypt the input data.
-k <password>
    Only use this if you want to pass the password as an argument. 
    Usually you can leave this out and you will be prompted for a 
    password. The password is used to derive the actual key which 
    is used to encrypt your data. Using this parameter is typically
    not considered secure because your password appears in 
    plain-text on the command line and will likely be recorded in 
    bash history.
-kfile <filename>
    Read the password from the first line of <filename> instead of
    from the command line as above.
-a
    base64 process the data. This means that if encryption is taking 
    place the data is base64 encoded after encryption. If decryption 
    is set then the input data is base64 decoded before being 
    decrypted.
    You likely DON'T need to use this. This will likely increase the
    file size for non-text data. Only use this if you need to send 
    data in the form of text format via email etc.
-salt
    To use a salt (randomly generated) when encrypting. You always
    want to use a salt while encrypting. This parameter is actually
    redundant because a salt is used whether you use this or not 
    which is why it was not used in the "Short Answer" above!
-K key    
    The actual key to use: this must be represented as a string
    comprised only of hex digits. If only the key is specified, the
    IV must additionally be specified using the -iv option. When 
    both a key and a password are specified, the key given with the
    -K option will be used and the IV generated from the password 
    will be taken. It probably does not make much sense to specify 
    both key and password.
-iv IV
    The actual IV to use: this must be represented as a string 
    comprised only of hex digits. When only the key is specified 
    using the -K option, the IV must explicitly be defined. When a
    password is being specified using one of the other options, the 
    IV is generated from this password.
-md digest
    Use the specified digest to create the key from the passphrase.
    The default algorithm as of this writing is sha-256. But this 
    has changed over time. It was md5 in the past. So you might want
    to specify this parameter every time to alleviate problems when
    moving your encrypted data from one system to another or when
    updating openssl to a newer version.

Aanvullende opmerkingen:

Hoewel je specifiek naar OpenSSL hebt gevraagd, kun je overwegen om in plaats daarvan GPG te gebruiken voor versleuteling op basis van dit artikel OpenSSL vs GPG voor het versleutelen van off-site back-ups?

Als u GPG wilt gebruiken om hetzelfde te doen, gebruikt u de volgende opdrachten:

Versleutelen:

gpg --output encrypted.data --symmetric --cipher-algo AES256 un_encrypted.data

Ontsleutelen:

gpg --output un_encrypted.data --decrypt encrypted.data

Opmerking: u wordt om een ​​wachtwoord gevraagd bij het versleutelen of ontsleutelen.


Antwoord 3, autoriteit 12%

Versleutelen:

openssl enc -in infile.txt -out encrypted.dat -e -aes256 -k symmetrickey

Decoderen:

openssl enc -in encrypted.dat -out outfile.txt -d -aes256 -k symmetrickey

Zie de openssl(1)-documenten voor meer informatie.


Antwoord 4, autoriteit 6%

GEBRUIK GEEN DEFAULT STANDAARD SLEUTELAFLEIDING VAN OPENSSL.

Momenteel maakt het geaccepteerde antwoord er gebruik van en is het niet langer aanbevolen en veilig.

Het is heel goed mogelijk voor een aanvaller om de sleutel gewoon bruut te forceren.

https://www.ietf.org/rfc/rfc2898.txt

PBKDF1 past een hash-functie toe, die MD2 [6], MD5 [19] of
SHA-1 [18], om sleutels af te leiden. De lengte van de afgeleide sleutel is begrensd
door de lengte van de hash-functie-uitvoer, die 16 octetten is voor MD2
en MD5 en 20 octetten voor SHA-1. PBKDF1 is compatibel met de sleutel
afleidingsproces in PKCS #5 v1.5. PBKDF1 wordt alleen aanbevolen voor compatibiliteit met bestaande
toepassingen, aangezien de sleutels die het produceert mogelijk niet groot genoeg zijn voor:
sommige toepassingen.

PBKDF2 past een pseudo-willekeurige functie toe (zie bijlage B.1 voor een
voorbeeld) om sleutels af te leiden. De lengte van de afgeleide sleutel is in wezen
onbegrensd. (De maximale effectieve zoekruimte voor de afgeleide sleutel kan echter worden beperkt door de structuur van de onderliggende
pseudo-willekeurige functie. Zie Bijlage B.1 voor verdere bespreking.)
PBKDF2 wordt aanbevolen voor nieuwe toepassingen.

Doe dit:

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

Opmerking: iteraties in decodering moeten hetzelfde zijn als iteraties in encryptie.

Iteraties moeten minimaal 10.000 zijn.
Hier is een goed antwoord op het aantal iteraties: https://security.stackexchange.com/a/3993

Ook… we hebben hier genoeg mensen die GPG aanbevelen. Lees die verdomde vraag.


Antwoord 5, autoriteit 3%

Zoals vermeld in de andere antwoorden, gebruikten eerdere versies van openssl een functie voor het afleiden van zwakke sleutels om een ​​AES-coderingssleutel af te leiden van het wachtwoord. Openssl v1.1.1 ondersteunt echter een sterkere sleutelafleidingsfunctie, waarbij de sleutel wordt afgeleid van het wachtwoord met behulp van pbkdf2 met een willekeurig gegenereerde salt, en meerdere iteraties van sha256-hashing (standaard 10.000).

Een bestand coderen:

openssl aes-256-cbc -e -salt -pbkdf2 -iter 10000 -in plaintextfilename -out encryptedfilename

Een bestand decoderen:

openssl aes-256-cbc -d -salt -pbkdf2 -iter 10000 -in encryptedfilename -out plaintextfilename

Antwoord 6, autoriteit 2%

Versleutelen:

$ openssl bf < arquivo.txt > arquivo.txt.bf

Ontsleutelen:

$ openssl bf -d < arquivo.txt.bf > arquivo.txt

bf === Blowfish in CBC-modus


Antwoord 7

Update met een willekeurig gegenereerde openbare sleutel.

Encryptie:

openssl enc -aes-256-cbc -a -salt -in {raw data} -out {encrypted data} -pass file:{random key}

Decoderen:

openssl enc -d -aes-256-cbc -in {ciphered data} -out {raw data}

Antwoord 8

Houd er rekening mee dat de OpenSSL CLI een zwak niet-standaard algoritme gebruikt om de wachtwoordzin naar een sleutel te converteren, en het installeren van GPG resulteert in verschillende bestanden die aan uw homedirectory worden toegevoegd en een gpg-agent-achtergrondproces wordt uitgevoerd. Als u maximale draagbaarheid en controle met bestaande tools wilt, kunt u PHP of Python gebruiken om toegang te krijgen tot de lagere API’s en direct een volledige AES-sleutel en IV door te geven.

Voorbeeld PHP-aanroep via Bash:

IV='c2FtcGxlLWFlcy1pdjEyMw=='
KEY='Twsn8eh2w2HbVCF5zKArlY+Mv5ZwVyaGlk5QkeoSlmc='
INPUT=123456789023456
ENCRYPTED=$(php -r "print(openssl_encrypt('$INPUT','aes-256-ctr',base64_decode('$KEY'),OPENSSL_ZERO_PADDING,base64_decode('$IV')));")
echo '$ENCRYPTED='$ENCRYPTED
DECRYPTED=$(php -r "print(openssl_decrypt('$ENCRYPTED','aes-256-ctr',base64_decode('$KEY'),OPENSSL_ZERO_PADDING,base64_decode('$IV')));")
echo '$DECRYPTED='$DECRYPTED

Dit geeft het volgende weer:

$ENCRYPTED=nzRi252dayEsGXZOTPXW
$DECRYPTED=123456789023456

Je kunt ook de openssl_pbkdf2-functie van PHP gebruiken om een ​​wachtwoordzin veilig om te zetten in een sleutel.


Antwoord 9

Er is een open source-programma dat ik online vind dat openssl gebruikt om bestanden te coderen en te decoderen. Het doet dit met een enkel wachtwoord. Het mooie van dit open source-script is dat het het originele niet-versleutelde bestand verwijdert door het bestand te versnipperen. Maar het gevaarlijke hieraan is dat als het originele niet-versleutelde bestand eenmaal verdwenen is, je ervoor moet zorgen dat je je wachtwoord onthoudt, anders is er geen andere manier om je bestand te ontsleutelen.

Hier is de link op github

https://github.com/EgbieAnderson1/linux_file_encryptor/blob/master/ file_encrypt.py

LEAVE A REPLY

Please enter your comment!
Please enter your name here

20 − eleven =

Other episodes