আমি একটি পাসওয়ার্ড ব্যবহার করে একটি ফাইল ক্রিপ্ট এবং ডিক্রিপ্ট করতে চাই।
এটি করতে আমি কীভাবে ওপেনএসএসএল ব্যবহার করতে পারি?
আমি একটি পাসওয়ার্ড ব্যবহার করে একটি ফাইল ক্রিপ্ট এবং ডিক্রিপ্ট করতে চাই।
এটি করতে আমি কীভাবে ওপেনএসএসএল ব্যবহার করতে পারি?
উত্তর:
সুরক্ষা সতর্কতা : AES-256-CBC প্রমাণীকৃত এনক্রিপশন সরবরাহ করে না এবং ওরাকল আক্রমণগুলিকে প্যাডিংয়ের পক্ষে ঝুঁকিপূর্ণ । পরিবর্তে আপনার বয়সের মতো কিছু ব্যবহার করা উচিত ।
এনক্রিপ্ট:
openssl aes-256-cbc -a -salt -in secrets.txt -out secrets.txt.enc
ডিক্রিপ্ট:
openssl aes-256-cbc -d -a -in secrets.txt.enc -out secrets.txt.new
-md sha256
যদি অন্য কোনও মেশিনে এই ফাইলটি ব্যবহার করার পরিকল্পনা করেন তবে আপনি আপনার এনকোড এবং ডিকোড কমান্ডে যুক্ত করতে পারেন । এটি আপনাকে ওপেনএসএসএল সংস্করণের অসঙ্গতি / পার্থক্যের বিরুদ্ধে আচ্ছাদিত করবে
আপনি সম্ভবত এর gpg
পরিবর্তে ব্যবহার করতে চান openssl
তাই এই উত্তরটির শেষে "অতিরিক্ত নোটগুলি" দেখুন । তবে ব্যবহার করে প্রশ্নের উত্তর দিতে openssl
:
এনক্রিপ্ট করতে:
openssl enc -aes-256-cbc -in un_encrypted.data -out encrypted.data
ডিক্রিপ্ট করতে:
openssl enc -d -aes-256-cbc -in encrypted.data -out un_encrypted.data
দ্রষ্টব্য: এনক্রিপ্ট বা ডিক্রিপ্ট করার সময় আপনাকে একটি পাসওয়ার্ডের জন্য অনুরোধ জানানো হবে।
আপনার তথ্যের সর্বোত্তম উত্স openssl enc
সম্ভবত হ'ল: https://www.openssl.org/docs/man1.1.1/man1/enc.html
কমান্ড লাইন:
openssl enc
নিম্নলিখিত ফর্ম গ্রহণ করে:
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]
আপনার প্রশ্নের সাথে সর্বাধিক দরকারী পরামিতিগুলির ব্যাখ্যা:
-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.
যদিও আপনি বিশেষত ওপেনএসএসএল সম্পর্কে জিজ্ঞাসা করেছেন আপনি এই নিবন্ধটির উপর ভিত্তি করে জিপিজি ব্যবহারের পরিবর্তে জিপিজি ব্যবহারের বিষয়ে বিবেচনা করতে চাইতে পারেন ওপেনএসএসএল বনাম জিপিজি অফ সাইট ব্যাকআপ এনক্রিপ্ট করার জন্য?
জিপিজি ব্যবহার করতে আপনি নিম্নলিখিত কমান্ডগুলি ব্যবহার করতে পারেন:
এনক্রিপ্ট করতে:
gpg --output encrypted.data --symmetric --cipher-algo AES256 un_encrypted.data
ডিক্রিপ্ট করতে:
gpg --output un_encrypted.data --decrypt encrypted.data
দ্রষ্টব্য: এনক্রিপ্ট বা ডিক্রিপ্ট করার সময় আপনাকে একটি পাসওয়ার্ডের জন্য অনুরোধ জানানো হবে।
gpg
আমাকে পাসওয়ার্ডের জন্য অনুরোধ না করে একটি ফাইল ডিক্রিপ্ট করতে দিচ্ছে। দেখে মনে হচ্ছে পাসওয়ার্ডটি কিছু সময়ের জন্য সঞ্চয় করা আছে যা আমি চাই না।
--no-symkey-cache
জিপিজি ব্যবহার করে ক্যাশে অক্ষম করে --symmetric
, এমনকি এজেন্ট চলমান থাকলেও।
এনক্রিপ্ট:
openssl enc -in infile.txt -out encrypted.dat -e -aes256 -k symmetrickey
ডিক্রিপ্ট:
openssl enc -in encrypted.dat -out outfile.txt -d -aes256 -k symmetrickey
বিশদগুলির জন্য, openssl(1)
দস্তাবেজগুলি দেখুন।
-k symmetrickey
সাথে প্রতিস্থাপন করুন-pass stdin
-pass 'pass:PASSWORD'
-k symmetrickey
বিভ্রান্তিকর। -k
বিকল্প একটি পাসওয়ার্ড, যা থেকে দ্বারা OpenSSL প্রতিসম কী আহরিত উল্লেখ জন্য ব্যবহৃত হয়। আপনি যদি প্রতিসম কী নির্দিষ্ট করতে চান তবে আপনাকে অবশ্যই -K
বিকল্পটি ব্যবহার করতে হবে ।
ওপেনসেল ডিফল্ট কী ডাইরিভিশন ব্যবহার করবেন না।
বর্তমানে গৃহীত উত্তর এটির ব্যবহার করে এবং এটি আর প্রস্তাবিত এবং সুরক্ষিত থাকে না।
আক্রমণকারীটির পক্ষে কীটিকে জোর করে চাপিয়ে দেওয়া খুব সম্ভব।
https://www.ietf.org/rfc/rfc2898.txt
পিবিকেডিএফ 1 একটি হ্যাশ ফাংশন প্রয়োগ করে, যা কী প্রাপ্ত করার জন্য এমডি 2 [6], এমডি 5 [19] বা এসএএএ -1 [18] হবে। উত্পন্ন কীটির দৈর্ঘ্য হ্যাশ ফাংশন আউটপুটের দৈর্ঘ্যের সাথে আবদ্ধ, যা MD2 এবং MD5 এর 16 টি অক্টেট এবং SHA-1 এর জন্য 20 অক্টেট। পিবিসিডিএফ 1 পিকেসিএস # 5 ভি 1.5-তে কী ডেরাইভেশন প্রক্রিয়ার সাথে সামঞ্জস্যপূর্ণ। পিবিকেডিএফ 1 কেবল বিদ্যমান অ্যাপ্লিকেশনগুলির সাথে সামঞ্জস্যের জন্যই সুপারিশ করা হয় যেহেতু এটি উত্পন্ন কীগুলি কিছু অ্যাপ্লিকেশনের পক্ষে যথেষ্ট পরিমাণে বড় না হতে পারে।
পিবিকেডিএফ 2 কী ব্যবহার করার জন্য একটি সিউডোরানডম ফাংশন প্রয়োগ করে (উদাহরণস্বরূপ পরিশিষ্ট B.1 দেখুন)। উত্পন্ন চাবিটির দৈর্ঘ্য মূলত সীমাহীন। (তবে, অন্তর্নিহিত সিউডোরোডম ফাংশনের কাঠামোর দ্বারা উদ্ভূত কীটির সর্বাধিক কার্যকর অনুসন্ধানের জায়গা সীমাবদ্ধ হতে পারে further আরও আলোচনার জন্য পরিশিষ্ট B.1 দেখুন)) নতুন অ্যাপ্লিকেশনগুলির জন্য পিবিকেডিএফ 2 প্রস্তাবিত।
এটা কর:
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
দ্রষ্টব্য : ডিক্রিপশনে আইট্রেশনগুলি এনক্রিপশনে পুনরাবৃত্তির মতো হতে হবে।
আইট্রেশনগুলি সর্বনিম্ন 10000 হতে হবে ite পুনরাবৃত্তির সংখ্যার জন্য এখানে একটি ভাল উত্তর: https://security.stackexchange.com/a/3993
এছাড়াও ... আমরা এখানে জিপিজির পরামর্শ দেওয়ার জন্য পর্যাপ্ত লোক পেয়েছি। জঘন্য প্রশ্ন পড়ুন।
এনক্রিপ্ট করতে:
$ openssl bf < arquivo.txt > arquivo.txt.bf
ডিক্রিপ্ট করতে:
$ openssl bf -d < arquivo.txt.bf > arquivo.txt
bf === সিবিসি মোডে ব্লোফিশ
একটি এলোমেলোভাবে উত্পন্ন সর্বজনীন কী ব্যবহার করে আপডেট করুন।
Encypt:
openssl enc -aes-256-cbc -a -salt -in {raw data} -out {encrypted data} -pass file:{random key}
ডিক্রিপ্ট:
openssl enc -d -aes-256-cbc -in {ciphered data} -out {raw data}
আমি এটার উপর একটি পূর্ণ টিউটোরিয়াল আছে http://bigthinkingapplied.com/key-based-encryption-using-openssl/
নোট করুন যে ওপেনএসএসএল সিএলআই পাসফ্রেজকে কীতে রূপান্তর করতে একটি দুর্বল অ-মানক অ্যালগরিদম ব্যবহার করে এবং আপনার হোম ডিরেক্টরিতে যুক্ত জিপিজি ফলাফলগুলি বিভিন্ন ফাইল যুক্ত করে এবং একটি জিপিজি-এজেন্ট ব্যাকগ্রাউন্ড প্রক্রিয়া চলছে। আপনি যদি বিদ্যমান সরঞ্জামগুলির সাথে সর্বাধিক পোর্টেবিলিটি এবং নিয়ন্ত্রণ চান তবে আপনি পিএইচপি বা পাইথন ব্যবহার করতে পারেন নিম্ন স্তরের এপিআইগুলি অ্যাক্সেস করতে এবং সরাসরি একটি পূর্ণ এইএস কী এবং আইভিতে পাস করতে।
বাশের মাধ্যমে পিএইচপি প্রার্থনার উদাহরণ:
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
এই ফলাফলগুলি:
$ENCRYPTED=nzRi252dayEsGXZOTPXW
$DECRYPTED=123456789023456
আপনি openssl_pbkdf2
কোনও পাসফ্রেজকে নিরাপদে কোনও কীতে রূপান্তর করতে পিএইচপি এর ফাংশন ব্যবহার করতে পারেন ।
একটি ওপেন সোর্স প্রোগ্রাম রয়েছে যা আমি অনলাইনে দেখতে পাই এটি ফাইলগুলি এনক্রিপ্ট এবং ডিক্রিপ্ট করার জন্য ওপেনসেল ব্যবহার করে। এটি একক পাসওয়ার্ড দিয়ে এটি করে। এই ওপেন সোর্স স্ক্রিপ্টের দুর্দান্ত জিনিসটি হ'ল এটি ফাইলটি ছাঁটাই করে মূল এনক্রিপ্ট করা ফাইলটি মুছে দেয়। তবে বিপজ্জনক বিষয়টি হ'ল একবার মূল এনক্রিপ্ট করা ফাইলটি চলে গেলে আপনাকে নিজের পাসওয়ার্ড মনে আছে তা নিশ্চিত করতে হবে অন্যথায় তারা আপনার ফাইলটি ডিক্রিপ্ট করার অন্য কোনও উপায় নয়।
এখানে লিঙ্কটি এটি গিথুবে রয়েছে
https://github.com/EgbieAnderson1/linux_file_encryptor/blob/master/file_encrypt.py
অন্যান্য উত্তরে উল্লিখিত হিসাবে, ওপেনসেলের পূর্ববর্তী সংস্করণগুলি পাসওয়ার্ড থেকে একটি এইএস এনক্রিপশন কী অর্জন করতে একটি দুর্বল কী ডেরাইভেশন ফাংশন ব্যবহার করেছে। যাইহোক, ওপেনসেল ভি 1.1.1 একটি শক্তিশালী কী ডেরিভিশন ফাংশন সমর্থন করে, যেখানে পাসওয়ার্ড ব্যবহার করে কীটি উত্পন্ন হয়েছেpbkdf2
এলোমেলোভাবে উত্পন্ন লবণের উত্পন্ন হয়েছে, এবং sha256 হ্যাশিংয়ের একাধিক পুনরাবৃত্তি (ডিফল্টরূপে 10,000)।
একটি ফাইল এনক্রিপ্ট করতে:
openssl aes-256-cbc -e -salt -pbkdf2 -iter 10000 -in plaintextfilename -out encryptedfilename
একটি ফাইল ডিক্রিপ্ট করতে:
openssl aes-256-cbc -d -salt -pbkdf2 -iter 10000 -in encryptedfilename -out plaintextfilename
ভাল উত্তর mti2935 অতিরিক্ত মন্তব্য।
মনে হয় উচ্চতর পুনরাবৃত্তিটি ব্রুটের বিরুদ্ধে প্রতিরোধের আরও ভাল সুরক্ষা, এবং আপনার উচ্চতর পুনরাবৃত্তিটি ব্যবহার করা উচিত কারণ আপনি দক্ষতা / সংস্থান অনুসারে দক্ষতা অর্জন করতে পারেন afford
আমার পুরানো ইন্টেল i3-7100 এর পরিবর্তে একটি বড় ফাইল 1.5 জিবি এনক্রিপ্ট করছে:
time openssl enc -aes256 -e -pbkdf2 -iter 10000 -pass pass:"mypassword" -in "InputFile" -out "OutputFile"
Seconds: 2,564s
time openssl enc -aes256 -e -pbkdf2 -iter 262144 -pass pass:"mypassword" -in "InputFile" -out "OutputFile"
Seconds: 2,775s
আসলে কোনও পার্থক্য নয়, যদিও (?) মেমরির ব্যবহার পরীক্ষা করে নি
আজকের জিপিইউ এবং আরও দ্রুতগতির সাথে, আমি অনুমান করি বিলিয়ন ব্রুট ফোর্স পুনরাবৃত্তি প্রতি সেকেন্ডে সম্ভব বলে মনে হচ্ছে।
12 বছর আগে কNVIDIA GeForce 8800 Ultra
200.000 মিলিয়ন / সেকেন্ড পুনরাবৃত্তি পুনরুক্তি করতে পারে (যদিও MD5 হ্যাশিং)
PKCS5_PBKDF2_HMAC
।EVP_*
এনক্রিপ্ট এবং ডিক্রিপ্ট করার জন্য আপনার ফাংশনগুলি ব্যবহার করা উচিত । ওপেনএসএসএল উইকিতে ইভিপি সিমেট্রিক এনক্রিপশন এবং ডিক্রিপশন দেখুন । আসলে, আপনার সম্ভবত প্রমাণীকৃত এনক্রিপশন ব্যবহার করা উচিত কারণ এটি গোপনীয়তা এবং সত্যতা উভয়ই সরবরাহ করে । ওপেনএসএসএল উইকিতে ইভিপি প্রমাণীকৃত এনক্রিপশন এবং ডিক্রিপশন দেখুন ।