| OPENSSL-ENC(1ssl) | OpenSSL | OPENSSL-ENC(1ssl) |
نام (NAME)
openssl-enc - روالهای رمزگذاری متقارن
خلاصه دستور (SYNOPSIS)
openssl enc|cipher [-cipher] [-help] [-list] [-ciphers] [-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 digest] [-iter count] [-pbkdf2] [-saltlen size] [-p] [-P] [-bufsize number] [-nopad] [-v] [-debug] [-none] [-skeymgmt skeymgmt] [-skeyopt opt:value] [-engine id] [-rand files] [-writerand file] [-provider name] [-provider-path path] [-provparam [name:]key=value] [-propquery propq]
openssl cipher [...]
توضیحات (DESCRIPTION)
دستورهای رمز متقارن امکان رمزگذاری یا رمزگشایی دادهها را با استفاده از انواع رمزهای بلوکی و جریانی و با بهرهگیری از کلیدهای مبتنی بر گذرواژه یا کلیدهای صریحاً ارائهشده فراهم میکنند. همچنین کدگذاری یا کدگشایی Base64 میتواند به تنهایی یا علاوه بر رمزگذاری یا رمزگشایی انجام شود.
گزینهها (OPTIONS)
- -cipher
- الگوریتم رمزی که باید استفاده شود.
- -help
- چاپ پیام راهنمای نحوه استفاده.
- -list
- فهرست کردن تمام رمزهای پشتیبانیشده.
- -ciphers
- نام مستعار -list برای نمایش تمام رمزهای پشتیبانیشده.
- -in filename
- نام فایل ورودی؛ به طور پیشفرض ورودی استاندارد است.
- -out filename
- نام فایل خروجی؛ به طور پیشفرض خروجی استاندارد است.
- -pass arg
- منبع گذرواژه. برای اطلاعات بیشتر درباره قالب arg به openssl-passphrase-options(1) مراجعه کنید.
- -e
- رمزگذاری دادههای ورودی؛ این حالت پیشفرض است.
- -d
- رمزگشایی دادههای ورودی.
- -a
- پردازش
دادهها با
Base64. این بدان
معناست که
در صورت
رمزگذاری،
دادهها پس
از
رمزگذاری
به صورت Base64
کدگذاری
میشوند. در
صورت تنظیم
رمزگشایی،
دادههای
ورودی پیش
از
رمزگشایی،
با Base64
کدگشایی
میشوند.
هنگامی که گزینه -A داده نشود، در زمان کدگذاری پس از هر ۶۴ نویسه یک خط جدید درج میشود و در زمان کدگشایی، وجود یک خط جدید در میان ۱۰۲۴ بایت اول ورودی انتظار میرود.
- -base64
- مشابه -a
- -A
- اگر گزینه -a تنظیم شده باشد، کدگذاری Base64 خروجی را بدون هیچ نویسه خط جدید تولید میکند، و کدگشایی Base64 به هیچ خط جدیدی نیاز نخواهد داشت. بنابراین، استفاده از گزینه -A هنگام رمزگشایی ورودی ناشناخته میتواند مفید باشد.
- -k password
- گذرواژهای که کلید از آن مشتق میشود. این گزینه برای سازگاری با نسخههای پیشین OpenSSL است. توسط آرگومان -pass منسوخ و جایگزین شده است.
- -kfile filename
- خواندن گذرواژه برای مشتق کردن کلید از خط اول filename. این گزینه برای سازگاری با نسخههای پیشین OpenSSL است. توسط آرگومان -pass منسوخ و جایگزین شده است.
- -md digest
- استفاده از دایجست مشخصشده برای ایجاد کلید از عبارت عبور. الگوریتم پیشفرض sha-256 است.
- -iter count
- استفاده از تعداد تکرار معین برای گذرواژه در مشتق کردن کلید رمزگذاری. مقادیر بالا زمان لازم برای حمله جستجوی فراگیر به فایل حاصل را افزایش میدهند. این گزینه استفاده از الگوریتم PBKDF2 را برای مشتق کردن کلید فعال میکند.
- -pbkdf2
- استفاده از الگوریتم PBKDF2 با تعداد تکرار پیشفرض ۱۰۰۰۰، مگر اینکه توسط گزینه خط فرمان -iter به گونه دیگری مشخص شده باشد.
- -saltlen
- تنظیم طول نمک (salt) مورد استفاده هنگام استفاده از گزینه -pbkdf2. به دلایل سازگاری، مقدار پیشفرض ۸ بایت است. حداکثر مقدار در حال حاضر ۱۶ بایت است. اگر گزینه -pbkdf2 استفاده نشود، این گزینه نادیده گرفته شده و طول نمک ثابت ۸ استفاده میشود. طول نمک استفادهشده هنگام رمزگذاری باید هنگام رمزگشایی نیز استفاده شود.
- -nosalt
- عدم استفاده از نمک در روالهای اشتقاق کلید. از این گزینه نباید استفاده شود مگر برای مقاصد آزمایش یا سازگاری با نسخههای بسیار قدیمی OpenSSL.
- -salt
- استفاده از نمک (تولید تصادفی یا ارائهشده با گزینه -S) هنگام رمزگذاری؛ این حالت پیشفرض است.
- -S salt
- نمک واقعی مورد استفاده: این مقدار باید به صورت رشتهای از ارقام هگزادسیمال نشان داده شود. اگر این گزینه هنگام رمزگذاری استفاده شود، دقیقاً همین مقدار در زمان رمزگشایی مجدداً مورد نیاز خواهد بود. این نمک ممکن است کوتاه شود یا با صفر پر شود تا با طول نمک مطابقت یابد (به -saltlen مراجعه کنید).
- -K key
- کلید واقعی مورد استفاده: این مقدار باید به صورت رشتهای شامل فقط ارقام هگزادسیمال نشان داده شود. اگر فقط کلید مشخص شده باشد، IV نیز باید با استفاده از گزینه -iv مشخص شود. هنگامی که هم کلید و هم گذرواژه مشخص شوند، کلید ارائهشده با گزینه -K استفاده خواهد شد و IV تولیدشده از گذرواژه در نظر گرفته میشود. تعیین همزمان کلید و گذرواژه چندان منطقی نیست.
- -iv IV
- مقدار IV واقعی مورد استفاده: این مقدار باید به صورت رشتهای شامل فقط ارقام هگزادسیمال نشان داده شود. هنگامی که فقط کلید با استفاده از گزینه -K مشخص شده باشد، IV باید صریحاً تعریف شود. هنگامی که گذرواژه با استفاده از یکی از گزینههای دیگر مشخص میشود، IV از این گذرواژه تولید میشود.
- -p
- چاپ کلید و IV استفادهشده.
- -P
- چاپ کلید و IV استفادهشده و سپس خروج فوری: هیچ رمزگذاری یا رمزگشایی انجام نشود.
- -bufsize number
- تنظیم اندازه بافر برای I/O.
- -nopad
- غیرفعال کردن پدینگ استاندارد بلوک.
- -v
- چاپ با جزئیات (verbose)؛ نمایش برخی آمارهای مربوط به I/O و اندازههای بافر.
- -debug
- اشکالزدایی BIOهای مورد استفاده برای I/O.
- -z
- فشردهسازی یا استخراج دادههای رمزگذاریشده با استفاده از zlib پس از رمزگذاری یا قبل از رمزگشایی. این گزینه تنها در صورتی وجود دارد که OpenSSL با گزینه zlib یا zlib-dynamic کامپایل شده باشد.
- -none
- استفاده از رمز تهی یا NULL (بدون رمزگذاری یا رمزگشایی ورودی).
- -skeymgmt skeymgmt
- برخی
ارائهدهندگان
ممکن است از
اشیاء مات
کلید
متقارن
پشتیبانی
کنند. برای
استفاده از
آنها،
باید نام
EVP_SKEYMGMT مورد
استفاده را
بدانیم. در
صورت عدم
تعیین، از
نام
الگوریتم
رمز
استفاده
خواهد شد.
برای یافتن نام مدیریت کلید متقارن مناسب، لطفاً به خروجی دستور "openssl list -skey-managers" مراجعه کنید.
- -skeyopt opt:value
- برای به دست آوردن یک کلید متقارن مات موجود یا تولید کلید جدید، گزینههای کلید به صورت opt:value مشخص میشوند. این گزینهها نمیتوانند همراه با هیچ گزینهای که به طور مستقیم یا غیرمستقیم بر کلید خام دلالت دارد استفاده شوند.
- -rand files, -writerand file
- برای جزئیات به بخش «گزینههای حالت تصادفی» در openssl(1) مراجعه کنید.
- -provider name
- -provider-path path
- -provparam [name:]key=value
- -propquery propq
- به «گزینههای ارائهدهنده» در openssl(1)، provider(7) و property(7) مراجعه کنید.
- -engine id
- به «گزینههای موتور» در openssl(1) مراجعه کنید. این گزینه منسوخ شده است.
نکات (NOTES)
برنامه را میتوان با "openssl cipher" یا "openssl enc -cipher" فراخوانی کرد. شکل اول با رمزهای ارائهشده توسط موتور (engine) کار نمیکند، زیرا این شکل پیش از خوانده شدن فایل پیکربندی و بارگذاری هرگونه ENGINE پردازش میشود. برای دریافت فهرستی از رمزهای پشتیبانیشده از دستور openssl-list(1) استفاده کنید.
موتورهایی که الگوریتمهای رمزگذاری کاملاً جدیدی را ارائه میدهند (مانند موتور ccgost که الگوریتم gost89 را ارائه میدهد) باید در فایل پیکربندی تنظیم شوند. موتورهای مشخصشده در خط فرمان با استفاده از گزینه -engine تنها میتوانند برای پیادهسازیهای سختافزاری رمزهایی استفاده شوند که توسط هسته OpenSSL یا موتور دیگری که در فایل پیکربندی مشخص شده است، پشتیبانی میشوند.
هنگامی که دستور enc رمزهای پشتیبانیشده را فهرست میکند، رمزهای ارائهشده توسط موتورها که در فایلهای پیکربندی مشخص شدهاند نیز فهرست میشوند.
در صورت نیاز، برای اشتقاق کلید و IV درخواست گذرواژه خواهد شد.
اگر کلید از یک گذرواژه مشتق میشود، گزینه -salt باید همیشه استفاده شود، مگر اینکه خواهان سازگاری با نسخههای قبلی OpenSSL باشید.
بدون گزینه -salt امکان انجام حملات لغتنامهای کارآمد روی گذرواژه و حمله به دادههای رمزگذاریشده با رمز جریانی وجود دارد. دلیل این امر آن است که بدون نمک، یک گذرواژه یکسان همیشه کلید رمزگذاری یکسانی تولید میکند.
هنگامی که نمک به صورت تصادفی تولید میشود (یعنی هنگام رمزگذاری با عبارت عبور بدون نمک صریحی که با گزینه -S داده شده باشد)، بایتهای اول دادههای رمزگذاریشده برای ذخیره نمک جهت رمزگشایی بعدی رزرو میشوند.
برخی از رمزها کلیدهای بزرگی ندارند و برخی دیگر در صورت عدم استفاده صحیح، پیامدهای امنیتی دارند. به افراد تازهکار توصیه میشود صرفاً از یک رمز بلوکی قوی، مانند AES، در حالت CBC استفاده کنند.
تمام رمزهای بلوکی به طور معمول از پدینگ PKCS#7 استفاده میکنند که با نام پدینگ بلوک استاندارد نیز شناخته میشود. این امر اجازه میدهد یک بررسی اولیه صحت داده یا گذرواژه انجام شود. با این حال، از آنجا که احتمال موفقیت دادههای تصادفی در این آزمون بیشتر از ۱ در ۲۵۶ است، آزمون چندان مناسبی نیست.
اگر پدینگ غیرفعال شود، دادههای ورودی باید مضربی از طول بلوک رمز باشند.
تمام رمزهای RC2 طول کلید و طول کلید مؤثر یکسانی دارند.
الگوریتمهای Blowfish و RC5 از یک کلید ۱۲۸ بیتی استفاده میکنند.
لطفاً توجه داشته باشید که OpenSSL 3.0 تأثیر گزینه -S را تغییر داده است. هر مقدار نمک صریح مشخصشده از طریق این گزینه دیگر هنگام رمزگذاری به ابتدای متن رمزشده اضافه نمیشود، و باید دوباره در زمان رمزگشایی صریحاً ارائه شود. برعکس، هنگامی که گزینه -S در حین رمزگشایی استفاده میشود، انتظار میرود که متن رمزشده مقدار نمک الحاقشده در ابتدا نداشته باشد.
هنگام استفاده از OpenSSL 3.0 یا جدیدتر برای رمزگشایی دادههایی که با یک نمک صریح تحت OpenSSL 1.1.1 رمزگذاری شدهاند، از گزینه -S استفاده نکنید؛ در این حالت نمک از متن رمزشده خوانده خواهد شد. برای تولید متن رمزشدهای که بتوان آن را با OpenSSL 1.1.1 رمزگشایی کرد، از گزینه -S استفاده نکنید؛ در این صورت نمک به صورت تصادفی تولید شده و به ابتدای خروجی اضافه خواهد شد.
رمزهای پشتیبانیشده (SUPPORTED CIPHERS)
توجه داشته باشید که برخی از این رمزها را میتوان در زمان کامپایل غیرفعال کرد و برخی دیگر تنها در صورتی در دسترس هستند که موتور مناسبی در فایل پیکربندی تنظیم شده باشد. خروجی حاصل از فراخوانی این دستور با گزینه -list (یعنی "openssl enc -list") فهرستی از رمزهای پشتیبانیشده توسط نسخه OpenSSL شما، شامل موارد ارائهشده توسط موتورهای پیکربندیشده است.
این دستور از حالتهای رمزگذاری احرازشده مانند CCM و GCM پشتیبانی نمیکند و در آینده نیز از چنین حالتهایی پشتیبانی نخواهد کرد. دلیل این امر لزوم شروع ارسال جریانی خروجی (مثلاً به خروجی استاندارد زمانی که -out استفاده نمیشود) پیش از اعتبارسنجی تگ احراز اصالت است. هنگامی که این دستور در یک خط لوله (pipeline) استفاده میشود، طرف دریافتکننده در صورت شکست احراز اصالت قادر به بازگشت به عقب (roll back) نخواهد بود. حالتهای AEAD که در حال حاضر کاربرد متداول دارند نیز در صورت استفاده مجدد از key/iv/nonce دچار شکست فاجعهبار در محرمانگی یا یکپارچگی میشوند، و از آنجا که openssl enc تمام بار مدیریت key/iv/nonce را بر دوش کاربر میگذارد، ریسک ارائه حالتهای AEAD بسیار بزرگتر از آن است که مجاز شمرده شود. این مشکلات مدیریت key/iv/nonce حالتهای دیگر ارائهشده در این دستور را نیز تحت تأثیر قرار میدهند، اما حالتهای شکست در این موارد شدت کمتری دارند و این قابلیت را نمیتوان در یک شاخه انتشار پایدار حذف کرد. برای رمزگذاری انبوه دادهها، چه با استفاده از حالتهای رمزگذاری احرازشده و چه حالتهای دیگر، openssl-cms(1) توصیه میشود، زیرا یک قالب داده استاندارد ارائه داده و مدیریت لازم برای key/iv/nonce را انجام میدهد.
هنگامی که enc با حالتهای پوشش کلید (key wrapping) استفاده میشود، دادههای ورودی را نمیتوان به صورت جریانی پردازش کرد، به این معنی که باید در یک نوبت پردازش شوند. در نتیجه، اندازه دادههای ورودی باید کمتر از اندازه بافر (آرگومان -bufsize، به طور پیشفرض 8*1024 بایت) باشد. رمزهای '*-wrap' نیاز دارند که طول ورودی مضربی از ۸ بایت باشد، زیرا هیچ پدینگی اعمال نمیشود. رمزهای '*-wrap-pad' اجازه هر طولی از ورودی را میدهند. در هر دو مورد، نیازی به IV نیست. به مثال زیر مراجعه کنید.
base64 Base 64 bf-cbc Blowfish in CBC mode bf Alias for bf-cbc blowfish Alias for bf-cbc bf-cfb Blowfish in CFB mode bf-ecb Blowfish in ECB mode bf-ofb Blowfish in OFB mode cast-cbc CAST in CBC mode cast Alias for cast-cbc cast5-cbc CAST5 in CBC mode cast5-cfb CAST5 in CFB mode cast5-ecb CAST5 in ECB mode cast5-ofb CAST5 in OFB mode chacha20 ChaCha20 algorithm des-cbc DES in CBC mode des Alias for des-cbc des-cfb DES in CFB mode des-ofb DES in OFB mode des-ecb DES in ECB mode des-ede-cbc Two key triple DES EDE in CBC mode des-ede Two key triple DES EDE in ECB mode des-ede-cfb Two key triple DES EDE in CFB mode des-ede-ofb Two key triple DES EDE in OFB mode des-ede3-cbc Three key triple DES EDE in CBC mode des-ede3 Three key triple DES EDE in ECB mode des3 Alias for des-ede3-cbc des-ede3-cfb Three key triple DES EDE CFB mode des-ede3-ofb Three key triple DES EDE in OFB mode desx DESX algorithm. gost89 GOST 28147-89 in CFB mode (provided by ccgost engine) gost89-cnt GOST 28147-89 in CNT mode (provided by ccgost engine) idea-cbc IDEA algorithm in CBC mode idea same as idea-cbc idea-cfb IDEA in CFB mode idea-ecb IDEA in ECB mode idea-ofb IDEA in OFB mode rc2-cbc 128 bit RC2 in CBC mode rc2 Alias for rc2-cbc rc2-cfb 128 bit RC2 in CFB mode rc2-ecb 128 bit RC2 in ECB mode rc2-ofb 128 bit RC2 in OFB mode rc2-64-cbc 64 bit RC2 in CBC mode rc2-40-cbc 40 bit RC2 in CBC mode rc4 128 bit RC4 rc4-64 64 bit RC4 rc4-40 40 bit RC4 rc5-cbc RC5 cipher in CBC mode rc5 Alias for rc5-cbc rc5-cfb RC5 cipher in CFB mode rc5-ecb RC5 cipher in ECB mode rc5-ofb RC5 cipher in OFB mode seed-cbc SEED cipher in CBC mode seed Alias for seed-cbc seed-cfb SEED cipher in CFB mode seed-ecb SEED cipher in ECB mode seed-ofb SEED cipher in OFB mode sm4-cbc SM4 cipher in CBC mode sm4 Alias for sm4-cbc sm4-cfb SM4 cipher in CFB mode sm4-ctr SM4 cipher in CTR mode sm4-ecb SM4 cipher in ECB mode sm4-ofb SM4 cipher in OFB mode aes-[128|192|256]-cbc 128/192/256 bit AES in CBC mode aes[128|192|256] Alias for aes-[128|192|256]-cbc aes-[128|192|256]-cfb 128/192/256 bit AES in 128 bit CFB mode aes-[128|192|256]-cfb1 128/192/256 bit AES in 1 bit CFB mode aes-[128|192|256]-cfb8 128/192/256 bit AES in 8 bit CFB mode aes-[128|192|256]-ctr 128/192/256 bit AES in CTR mode aes-[128|192|256]-ecb 128/192/256 bit AES in ECB mode aes-[128|192|256]-ofb 128/192/256 bit AES in OFB mode aes-[128|192|256]-wrap key wrapping using 128/192/256 bit AES aes-[128|192|256]-wrap-pad key wrapping with padding using 128/192/256 bit AES aria-[128|192|256]-cbc 128/192/256 bit ARIA in CBC mode aria[128|192|256] Alias for aria-[128|192|256]-cbc aria-[128|192|256]-cfb 128/192/256 bit ARIA in 128 bit CFB mode aria-[128|192|256]-cfb1 128/192/256 bit ARIA in 1 bit CFB mode aria-[128|192|256]-cfb8 128/192/256 bit ARIA in 8 bit CFB mode aria-[128|192|256]-ctr 128/192/256 bit ARIA in CTR mode aria-[128|192|256]-ecb 128/192/256 bit ARIA in ECB mode aria-[128|192|256]-ofb 128/192/256 bit ARIA in OFB mode camellia-[128|192|256]-cbc 128/192/256 bit Camellia in CBC mode camellia[128|192|256] Alias for camellia-[128|192|256]-cbc camellia-[128|192|256]-cfb 128/192/256 bit Camellia in 128 bit CFB mode camellia-[128|192|256]-cfb1 128/192/256 bit Camellia in 1 bit CFB mode camellia-[128|192|256]-cfb8 128/192/256 bit Camellia in 8 bit CFB mode camellia-[128|192|256]-ctr 128/192/256 bit Camellia in CTR mode camellia-[128|192|256]-ecb 128/192/256 bit Camellia in ECB mode camellia-[128|192|256]-ofb 128/192/256 bit Camellia in OFB mode
مثالها (EXAMPLES)
فقط کدگذاری Base64 یک فایل باینری:
openssl base64 -in file.bin -out file.b64
کدگشایی همان فایل:
openssl base64 -d -in file.b64 -out file.bin
رمزگذاری یک فایل با استفاده از AES-128 با درخواست گذرواژه در خط فرمان و اشتقاق کلید PBKDF2:
openssl enc -aes128 -pbkdf2 -in file.txt -out file.aes128
رمزگشایی یک فایل با استفاده از گذرواژه ارائهشده:
openssl enc -aes128 -pbkdf2 -d -in file.aes128 -out file.txt \ -pass pass:<password>
رمزگذاری یک فایل و سپس کدگذاری آن با Base64 (به عنوان مثال برای ارسال از طریق ایمیل) با استفاده از AES-256 در حالت CTR و اشتقاق کلید PBKDF2:
openssl enc -aes-256-ctr -pbkdf2 -a -in file.txt -out file.aes256
کدگشایی Base64 یک فایل و سپس رمزگشایی آن با استفاده از گذرواژه ارائهشده در یک فایل:
openssl enc -aes-256-ctr -pbkdf2 -d -a -in file.aes256 -out file.txt \ -pass file:<passfile>
پوشش کلید AES:
openssl enc -e -a -id-aes128-wrap-pad -K 000102030405060708090A0B0C0D0E0F -in file.bin or openssl aes128-wrap-pad -e -a -K 000102030405060708090A0B0C0D0E0F -in file.bin
اشکالات (BUGS)
گزینه -A هنگامی که با فایلهای بزرگ استفاده شود به درستی کار نمیکند. از سوی دیگر، هنگام کدگشایی base64 بدون گزینه -A، اگر ۱۰۲۴ بایت اول ورودی شامل نویسه خط جدید نباشد، دو خط اول ورودی نادیده گرفته میشوند.
دستور openssl enc تنها از تعداد مشخصی الگوریتم با پارامترهای معین پشتیبانی میکند. بنابراین، اگر به عنوان مثال بخواهید از RC2 با یک کلید ۷۶ بیتی یا RC4 با یک کلید ۸۴ بیتی استفاده کنید، نمیتوانید از این برنامه استفاده نمایید.
همچنین ببینید (SEE ALSO)
تاریخچه (HISTORY)
دایجست پیشفرض در OpenSSL 1.1.0 از MD5 به SHA256 تغییر یافت.
گزینه -list در OpenSSL 1.1.1e اضافه شد.
گزینههای -ciphers و -engine در OpenSSL 3.0 منسوخ شدند.
گزینه -saltlen در OpenSSL 3.2 اضافه شد.
گزینههای -skeymgmt و -skeyopt در OpenSSL 3.5 اضافه شدند.
حق نشر (COPYRIGHT)
حق نشر 2000-2025 متعلق به The OpenSSL Project Authors است. کلیه حقوق محفوظ است.
تحت مجوز Apache License 2.0 («مجوز») منتشر شده است. شما نمیتوانید از این فایل استفاده کنید مگر در انطباق با این مجوز. میتوانید یک نسخه از آن را در فایل LICENSE در توزیع مبدأ یا در https://www.openssl.org/source/license.html دریافت نمایید.
| 2026-08-25 | 3.6.4 |