分享

OpenSSL命令

 昵称54185769 2018-05-10

用途:

对称加密算法工具。它能够运用块或者流算法对数据加/解密。还能够把加密/接密,还可以把结果进行base64编码。

用法:

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

选项说明:

-ciphername:对称算法名字,此命令有两种适用方式:-ciphername方式或者省略enc直接用ciphername

-in filename:要加密/解密的输入文件,缺省为标准输入。

-out filename:要加密/解密的输出文件,缺省为标准输出。

-pass arg:输入文件如果有密码保护,指定密码来源。

-salt:为了和openssl0.9.5以后的版本兼容,默认设置。这是加密过后放在密码最前面的一段字符串,用途也是为了让破解更难。

-nosalt:和openssl0.9.5以前的版本兼容,就设置这个选项。

-e:进行加密操作,默认操作。

-d:进行解密操作。

-p:打印出使用的salt、口令以及初始化向量IV

-P:打印使用的salt、口令以及IV,不做加密和解密操作,直接退出。

-v:打印附加信息值。

-nopad:没有数据填充(主要用于非对称加解密操作)。

-debug:打印调试信息值。

-a:当进行加解密时,它只对数据进行运算,有时需要进行base64转换。设置此选项后,加密结果进行base64编码;解密前先进行base64解码。

-A:默认情况下,base64编码结果在文件中是多行的。如果要将生成的结果在文件中只有一行,需设置此选项;解密时,必须采用同样的设置,否则读取数据时会出错。

-base64:当进行加解密时,它只对数据进行运算,有时需要进行base64转换。设置此选项后,加密结果进行base64编码;解密前先进行base64解码。

-z:压缩数据(前提是编译的时候加进去了zlib库)。

-bufsize number:设置I/O操作的缓冲区大小,因为一个文件可能很大,每次读取的数据是有限的。

-k password:指定加密口令,不设置此项时,程序会提示用户输入口令。

-kfile filename:指定口令存放的文件。

-K key:用的实际密钥值:这个必须被提出,它是一个16进制的输入口令。如果没有这个选项,IV必须用B<-iv>选项指定。当key和密钥都指定时,用-K选项给定的key将会被使用,而使用密钥来产生初始化向量IV。不建议两者都指定。

-S hsaltsalt的值为16进制的。

-iv IV:实际上使用的初始化向量,这个必须被提出,它是一个16进制的初始化向量。当仅仅用-K选项指定了keyIV必须明确的定义。当一个密钥用其中一个选项所指定,IV将会与偶这个口令值来产生。

-md digest:摘要算法。

-none:不对数据进行加解密操作。

-id:硬件引擎。

注意:

这个命令可以这样B<openssl ciphername> B<openssl enc -ciphername>调用。但是第一个不能够工作于提供的硬件相关的算法,因为这个表单在配置文件读取和硬件加载时已经被处理。

提供的硬件引擎实体以及相关的算法(例如ccgost硬件引擎提供的gost89算法)必须在配置文件中配置。硬件引擎,在命令行中可以用-engine选项指定使用,但是他仅仅被用于hadrware-assisted类型的算法,hadrware-assisted类型的算法被OpenSSL核心或其他硬件所支持,在配置文件中指定。

enc命令列出支持的算法时,硬件引擎提供的算法在配置文件中和列表中都有指定。

如果可能的话,会提示出入密码来产生初始化密钥key和初始化向量IV

-salt选项必须被使用,因为初始化密钥key是由密码产生的,除非你想兼容很老的OpenSSL版本(0.9.5以前的版本)。

如果没有设置-salt选项,很容易用字典攻击法破你的密码,流加密算法也容易被破。原因是没有salt,用同样地密码经常产生同样地密钥值。当salt第一时间被使用,8个字节的加密数据将保留出salt的值:当加密一个文件时salt的值是随机产生的值。当从加密文件中读取数据时则解密它。

一些算法中没有高强度的密钥,如果不正确使用将会卷入安全问题。

加密算法中有块加密算法和流加密算法俩种,块加密算法是一次加密固定长度的数据,一般是8Bytes, 流加密算法则加密大量数据。一般推荐新手门仅仅使用一个强大的CBC模式的块加密算法,例如des3-cbc

所有的块加密算法普遍的用PKCS#5来进行填充来作为一个标准的块加密:它允许一个基本的完整值或执行密钥检查。自从随机数的产生,它比1256的数据好。

如果填充没有显示,输入数据必须分为多个算法块长度。

所有的RC2算法有相同的密钥和实际的密钥长度。

Blowfish RC5算法用一个128字节的密钥值。

支持的算法:

需要注意的是其中的一些算法可以在编译的时候显示,有些算法仅仅在配置文件中配置了硬件引擎后才能够使用。enc命令执行过程中,不支持的选项(例如 openssl enc-help)包含了算法列表,本命令支持的加密算法有:

  1. CFB mode  
  2.   
  3.  des-ede3-ofb       Three key triple DES EDE in OFB mode  
  4.   
  5.    
  6.  desx               DESX algorithm.  
  7.   
  8.    
  9.  gost89             GOST 28147-89 in CFB mode (provided by ccgost engine)  
  10.   
  11.  gost89-cnt        `GOST 28147-89 in CNT mode (provided by ccgost engine)   
  12.   
  13.    
  14.  idea-cbc           IDEA algorithm in CBC mode  
  15.   
  16.  idea               same as idea-cbc  
  17.   
  18.  idea-cfb           IDEA in CFB mode  
  19.   
  20.  idea-ecb           IDEA in ECB mode  
  21.   
  22.  idea-ofb           IDEA in OFB mode  
  23.   
  24.    
  25. base64             Base 64  
  26.   
  27.    
  28. bf-cbc             Blowfish in CBC mode  
  29.   
  30.  bf                 Alias for bf-cbc  
  31.   
  32.  bf-cfb             Blowfish in CFB mode  
  33.   
  34.  bf-ecb             Blowfish in ECB mode  
  35.   
  36.  bf-ofb             Blowfish in OFB mode  
  37.   
  38.    
  39. cast-cbc           CAST in CBC mode  
  40.   
  41.  cast               Alias for cast-cbc  
  42.   
  43.  cast5-cbc          CAST5 in CBC mode  
  44.   
  45.  cast5-cfb          CAST5 in CFB mode  
  46.   
  47.  cast5-ecb          CAST5 in ECB mode  
  48.   
  49.  cast5-ofb          CAST5 in OFB mode  
  50.   
  51.    
  52.  des-cbc            DES in CBC mode  
  53.   
  54.  des                Alias for des-cbc  
  55.   
  56.  des-cfb            DES in CBC mode  
  57.   
  58.  des-ofb            DES in OFB mode  
  59.   
  60.  des-ecb            DES in ECB mode  
  61.   
  62.    
  63.  des-ede-cbc        Two key triple DES EDE in CBC mode  
  64.   
  65.  des-ede            Two key triple DES EDE in ECB mode  
  66.   
  67.  des-ede-cfb        Two key triple DES EDE in CFB mode  
  68.   
  69.  des-ede-ofb        Two key triple DES EDE in OFB mode  
  70.   
  71.    
  72.  des-ede3-cbc       Three key triple DES EDE in CBC mode  
  73.   
  74.  des-ede3           Three key triple DES EDE in ECB mode  
  75.   
  76.  des3               Alias for des-ede3-cbc  
  77.   
  78.  des-ede3-cfb       Three key triple DES EDE   
  79.   
  80.  rc2-cbc            128 bit RC2 in CBC mode  
  81.   
  82.  rc2                Alias for rc2-cbc  
  83.   
  84.  rc2-cfb            128 bit RC2 in CFB mode  
  85.   
  86.  rc2-ecb            128 bit RC2 in ECB mode  
  87.   
  88.  rc2-ofb            128 bit RC2 in OFB mode  
  89.   
  90.  rc2-64-cbc         64 bit RC2 in CBC mode  
  91.   
  92.  rc2-40-cbc         40 bit RC2 in CBC mode  
  93.   
  94.    
  95.  rc4                128 bit RC4  
  96.   
  97.  rc4-64             64 bit RC4  
  98.   
  99.  rc4-40             40 bit RC4  
  100.   
  101.    
  102.  rc5-cbc            RC5 cipher in CBC mode  
  103.   
  104.  rc5                Alias for rc5-cbc  
  105.   
  106.  rc5-cfb            RC5 cipher in CFB mode  
  107.   
  108.  rc5-ecb            RC5 cipher in ECB mode  
  109.   
  110.  rc5-ofb            RC5 cipher in OFB mode  
  111.   
  112.    
  113.  aes-[128|192|256]-cbc        128/192/256 bit AES in CBC mode  
  114.   
  115.  aes-[128|192|256]     Alias for aes-[128|192|256]-cbc  
  116.   
  117.  aes-[128|192|256]-cfb        128/192/256 bit AES in 128 bit CFB mode  
  118.   
  119.  aes-[128|192|256]-cfb1      128/192/256 bit AES in 1 bit CFB mode  
  120.   
  121.  aes-[128|192|256]-cfb8      128/192/256 bit AES in 8 bit CFB mode  
  122.   
  123.  aes-[128|192|256]-ecb       128/192/256 bit AES in ECB mode  
  124.   
  125.  aes-[128|192|256]-ofb        128/192/256 bit AES in OFB mode  

大家可能看到DES都分des-ecb, des-cbc, des-cfb这些。简单解释一下。

ecb就是说每来8bytes,就加密8bytes送出去。各个不同的数据块之间没有任何联系。cbccfb则每次加密一个8bytes的时候都和上一个8bytes加密的结果有一个运算法则。各个数据块之间是有联系的。

实例:

把某二进制文件转换成base64编码方式:

  1. openssl base64 -in file.bin -out file.b64   

把某base64编码文件转换成二进制文件。

  1. openssl base64 -d -in file.b64 -out file.bin   


把某文件用DES-CBC方式加密。加密过程中会提示你输入保护密码。

  1. openssl des3 -salt -in file.txt -out file.des3   


解密该文件,密码通过-k来输入

  1. openssl des3 -d -salt -in file.des3 -out file.txt -k mypassword   


加密某文件,并且把加密结果进行base64编码。用bf+cbc算法加密

  1. openssl bf -a -salt -in file.txt -out file.bf   


先用base64解码某文件,再解密

  1. openssl bf -d -salt -a -in file.bf -out file.txt  


BUGs:

A选项在对大文件进行操作时,将不会起作用。

必须有个选项来标记迭代的次数。

Enc命令仅仅支持一个固定的算法长度。例如,向用76字节密钥的RC284字节的RC4,它不支持。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多