OPENSSL-ENC(1ssl) OpenSSL OPENSSL-ENC(1ssl)

openssl-enc - روال‌های رمزگذاری متقارن

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 [...]

دستورهای رمز متقارن امکان رمزگذاری یا رمزگشایی داده‌ها را با استفاده از انواع رمزهای بلوکی و جریانی و با بهره‌گیری از کلیدهای مبتنی بر گذرواژه یا کلیدهای صریحاً ارائه‌شده فراهم می‌کنند. همچنین کدگذاری یا کدگشایی Base64 می‌تواند به تنهایی یا علاوه بر رمزگذاری یا رمزگشایی انجام شود.

الگوریتم رمزی که باید استفاده شود.
چاپ پیام راهنمای نحوه استفاده.
فهرست کردن تمام رمزهای پشتیبانی‌شده.
نام مستعار -list برای نمایش تمام رمزهای پشتیبانی‌شده.
نام فایل ورودی؛ به طور پیش‌فرض ورودی استاندارد است.
نام فایل خروجی؛ به طور پیش‌فرض خروجی استاندارد است.
منبع گذرواژه. برای اطلاعات بیشتر درباره قالب arg به openssl-passphrase-options(1) مراجعه کنید.
رمزگذاری داده‌های ورودی؛ این حالت پیش‌فرض است.
رمزگشایی داده‌های ورودی.
پردازش داده‌ها با Base64. این بدان معناست که در صورت رمزگذاری، داده‌ها پس از رمزگذاری به صورت Base64 کدگذاری می‌شوند. در صورت تنظیم رمزگشایی، داده‌های ورودی پیش از رمزگشایی، با Base64 کدگشایی می‌شوند.

هنگامی که گزینه -A داده نشود، در زمان کدگذاری پس از هر ۶۴ نویسه یک خط جدید درج می‌شود و در زمان کدگشایی، وجود یک خط جدید در میان ۱۰۲۴ بایت اول ورودی انتظار می‌رود.

مشابه -a
اگر گزینه -a تنظیم شده باشد، کدگذاری Base64 خروجی را بدون هیچ نویسه خط جدید تولید می‌کند، و کدگشایی Base64 به هیچ خط جدیدی نیاز نخواهد داشت. بنابراین، استفاده از گزینه -A هنگام رمزگشایی ورودی ناشناخته می‌تواند مفید باشد.
گذرواژه‌ای که کلید از آن مشتق می‌شود. این گزینه برای سازگاری با نسخه‌های پیشین OpenSSL است. توسط آرگومان -pass منسوخ و جایگزین شده است.
خواندن گذرواژه برای مشتق کردن کلید از خط اول filename. این گزینه برای سازگاری با نسخه‌های پیشین OpenSSL است. توسط آرگومان -pass منسوخ و جایگزین شده است.
استفاده از دایجست مشخص‌شده برای ایجاد کلید از عبارت عبور. الگوریتم پیش‌فرض sha-256 است.
استفاده از تعداد تکرار معین برای گذرواژه در مشتق کردن کلید رمزگذاری. مقادیر بالا زمان لازم برای حمله جستجوی فراگیر به فایل حاصل را افزایش می‌دهند. این گزینه استفاده از الگوریتم PBKDF2 را برای مشتق کردن کلید فعال می‌کند.
استفاده از الگوریتم PBKDF2 با تعداد تکرار پیش‌فرض ۱۰۰۰۰، مگر اینکه توسط گزینه خط فرمان -iter به گونه دیگری مشخص شده باشد.
تنظیم طول نمک (salt) مورد استفاده هنگام استفاده از گزینه -pbkdf2. به دلایل سازگاری، مقدار پیش‌فرض ۸ بایت است. حداکثر مقدار در حال حاضر ۱۶ بایت است. اگر گزینه -pbkdf2 استفاده نشود، این گزینه نادیده گرفته شده و طول نمک ثابت ۸ استفاده می‌شود. طول نمک استفاده‌شده هنگام رمزگذاری باید هنگام رمزگشایی نیز استفاده شود.
عدم استفاده از نمک در روال‌های اشتقاق کلید. از این گزینه نباید استفاده شود مگر برای مقاصد آزمایش یا سازگاری با نسخه‌های بسیار قدیمی OpenSSL.
استفاده از نمک (تولید تصادفی یا ارائه‌شده با گزینه -S) هنگام رمزگذاری؛ این حالت پیش‌فرض است.
نمک واقعی مورد استفاده: این مقدار باید به صورت رشته‌ای از ارقام هگزادسیمال نشان داده شود. اگر این گزینه هنگام رمزگذاری استفاده شود، دقیقاً همین مقدار در زمان رمزگشایی مجدداً مورد نیاز خواهد بود. این نمک ممکن است کوتاه شود یا با صفر پر شود تا با طول نمک مطابقت یابد (به -saltlen مراجعه کنید).
کلید واقعی مورد استفاده: این مقدار باید به صورت رشته‌ای شامل فقط ارقام هگزادسیمال نشان داده شود. اگر فقط کلید مشخص شده باشد، IV نیز باید با استفاده از گزینه -iv مشخص شود. هنگامی که هم کلید و هم گذرواژه مشخص شوند، کلید ارائه‌شده با گزینه -K استفاده خواهد شد و IV تولیدشده از گذرواژه در نظر گرفته می‌شود. تعیین هم‌زمان کلید و گذرواژه چندان منطقی نیست.
مقدار IV واقعی مورد استفاده: این مقدار باید به صورت رشته‌ای شامل فقط ارقام هگزادسیمال نشان داده شود. هنگامی که فقط کلید با استفاده از گزینه -K مشخص شده باشد، IV باید صریحاً تعریف شود. هنگامی که گذرواژه با استفاده از یکی از گزینه‌های دیگر مشخص می‌شود، IV از این گذرواژه تولید می‌شود.
چاپ کلید و IV استفاده‌شده.
چاپ کلید و IV استفاده‌شده و سپس خروج فوری: هیچ رمزگذاری یا رمزگشایی انجام نشود.
تنظیم اندازه بافر برای I/O.
غیرفعال کردن پدینگ استاندارد بلوک.
چاپ با جزئیات (verbose)؛ نمایش برخی آمارهای مربوط به I/O و اندازه‌های بافر.
اشکال‌زدایی BIOهای مورد استفاده برای I/O.
فشرده‌سازی یا استخراج داده‌های رمزگذاری‌شده با استفاده از zlib پس از رمزگذاری یا قبل از رمزگشایی. این گزینه تنها در صورتی وجود دارد که OpenSSL با گزینه zlib یا zlib-dynamic کامپایل شده باشد.
استفاده از رمز تهی یا NULL (بدون رمزگذاری یا رمزگشایی ورودی).
برخی ارائه‌دهندگان ممکن است از اشیاء مات کلید متقارن پشتیبانی کنند. برای استفاده از آن‌ها، باید نام EVP_SKEYMGMT مورد استفاده را بدانیم. در صورت عدم تعیین، از نام الگوریتم رمز استفاده خواهد شد.

برای یافتن نام مدیریت کلید متقارن مناسب، لطفاً به خروجی دستور "openssl list -skey-managers" مراجعه کنید.

برای به دست آوردن یک کلید متقارن مات موجود یا تولید کلید جدید، گزینه‌های کلید به صورت opt:value مشخص می‌شوند. این گزینه‌ها نمی‌توانند همراه با هیچ گزینه‌ای که به طور مستقیم یا غیرمستقیم بر کلید خام دلالت دارد استفاده شوند.
برای جزئیات به بخش «گزینه‌های حالت تصادفی» در openssl(1) مراجعه کنید.
به «گزینه‌های ارائه‌دهنده» در openssl(1)، provider(7) و property(7) مراجعه کنید.
به «گزینه‌های موتور» در openssl(1) مراجعه کنید. این گزینه منسوخ شده است.

برنامه را می‌توان با "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 استفاده نکنید؛ در این صورت نمک به صورت تصادفی تولید شده و به ابتدای خروجی اضافه خواهد شد.

توجه داشته باشید که برخی از این رمزها را می‌توان در زمان کامپایل غیرفعال کرد و برخی دیگر تنها در صورتی در دسترس هستند که موتور مناسبی در فایل پیکربندی تنظیم شده باشد. خروجی حاصل از فراخوانی این دستور با گزینه -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

فقط کدگذاری 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

گزینه -A هنگامی که با فایل‌های بزرگ استفاده شود به درستی کار نمی‌کند. از سوی دیگر، هنگام کدگشایی base64 بدون گزینه -A، اگر ۱۰۲۴ بایت اول ورودی شامل نویسه خط جدید نباشد، دو خط اول ورودی نادیده گرفته می‌شوند.

دستور openssl enc تنها از تعداد مشخصی الگوریتم با پارامترهای معین پشتیبانی می‌کند. بنابراین، اگر به عنوان مثال بخواهید از RC2 با یک کلید ۷۶ بیتی یا RC4 با یک کلید ۸۴ بیتی استفاده کنید، نمی‌توانید از این برنامه استفاده نمایید.

openssl-list(1)، EVP_SKEY(3)

دایجست پیش‌فرض در 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 اضافه شدند.

حق نشر 2000-2025 متعلق به The OpenSSL Project Authors است. کلیه حقوق محفوظ است.

تحت مجوز Apache License 2.0 («مجوز») منتشر شده است. شما نمی‌توانید از این فایل استفاده کنید مگر در انطباق با این مجوز. می‌توانید یک نسخه از آن را در فایل LICENSE در توزیع مبدأ یا در https://www.openssl.org/source/license.html دریافت نمایید.

2026-08-25 3.6.4