openssl enc 加解密

摘要:
E: OpenSSLfoo˃opensslenc-P-des3-passpass:123 ina。txtsalt=669E2AB46DA79FA0key=EFDB3D1EF18840FF7961E5346FED81CD34D8926A106F71iv=2FBE944B72F3CA59E:OpenSSLfoo˃opensslenc-P-des3-passpass:123 ina。Txtalt=2D89EA80CDE7700Ekey=825A74419BADD6A82D6DD9ECD9404397EB5AFC020A75D511iv=152185CA47D212A0使用盐值,相同的明文可以生成不同的密文。你能解密它吗?例如:E:OpenSSL foo˃opensslenc-p-des3-passpass:123-ina。txt outa des3saltsat=A254906CA471C1D4 key=15A12DB86A8A09ABB3C59C1712D865447D96AD1BC940CA56iv=264E495D7649F9F8E:OpenSSLfoo˃xxda.des3salt0000000:53616c7465645f5fa254906ca471c1d4Salted_。T、 L.q.0000010:952e1995b60d1813……注意盐和盐中的a254906ca471c1d4相同。我曾经用POCO编写加密程序来加密一个文件,然后使用openssl来加密同一个文件。因此,加密的文件是不同的。原来盐的价值是奇怪的。E: OpenSSLfoo˃opensslenc-d-des3-passpass:123 ina.des3salt-outa.decE:OpenSSLfoo˃diffa.txta。DecE:OpenSSLfoo˃-a Base64对加密数据进行编码,或在解密前对数据进行Base64解码。E: OpenSSLfoo˃opensslenc-des3-k123-ina.txt outa.des3base64E:OpenSSLfoo˃opensslenc-ds3-da-k123-ina.des3base64outb.txtE:OpenSSL foo˃diffa.txtb。Txt-A如果指定了-A选项,则对每行执行base64处理。请参阅alt算法。除了上面提到的des3之外,openssl还提供了哪些算法?
介绍

enc - 对称加密例程,使用对称密钥对数据进行加解密,特点是速度快,能对大量数据进行处理。算法有流算法和分组加密算法,流算法是逐字节加密,数据经典算法,但由于其容易被破译,现在已很少使用;分组加密算法是将数据分成固定大小的组里,然后逐组进行加密,比较广为人知的是DES3。分组算法中又有ECB,CBC,CFB,OFB,CTR等工作模式,其中默认选CBC工作模式。

语法

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]

enc 主命令,虽然直接调用加密算法名字也行,例如:

  1. openssl des3 -pass pass:"123" -in a.txt -out a.txt.des3  


但是不推荐使用,理由是这种调用形式对于需要硬件引擎的算法不能正常工作(算法,可以由硬件完成)。

-in / -out   filename    输入待加解密的文件,输出加解密后的文件

-pass arg

-pass 提供了几种传入密码的方式。传统是利用-k 选项传入密码的。(关于环境变量,文件描述符,请参阅相关文献)

  1. -pass pass:"123"      #密码是123  
  2. -pass pass:123        #密码是123  
  3. -pass evn:VAR         #密码从环境变量VAR中去  
  4. -pass file:p.txt      #密码从文件p.txt第一行去,不包括换行符,注意DOS格式的^M及回车符。  
  5. -pass fd:3            #密码从文件描述符3中读  
  6. -pass stdin           #标准输入  

-salt     加盐,这是开启的默认选项,使用-nosalt已明确关闭此选项,除非为了兼容性的考虑,否则在新程序中请使用此选项。这是一个神奇的选项,加盐后,相同的明文可以得到不同的密文。默认情况下,盐值是随机生成的,可以使用-S选项明确指定盐值。

  1. E:OpenSSLfoo>openssl enc -P -des3 -pass pass:123  -in a.txt  
  2. salt=669E2AB46DA79FA0  
  3. key=EFDB3D1EF18840FF7961E5346FCED81CD34D89286A106F71  
  4. iv =2FBE944B72F3CA59  
  5.   
  6. E:OpenSSLfoo>openssl enc -P -des3 -pass pass:123  -in a.txt  
  7. salt=2D89EA80CDE7700E  
  8. key=825A74419BADD6A82D6DD9ECD9404397EB5AFC020A75D511  
  9. iv =152185CA47D212A0  

有了盐值后,相同的明文可以产生不同的密文,那可以解密吗?当然可以。在密文中包含了盐值。例如:

  1. E:OpenSSLfoo>openssl enc -p -des3 -pass pass:123  -in a.txt -out a.des3salt  
  2. salt=A254906CA471C1D4  
  3. key=15A12DB86A8A09ABB3C59C1712D865447D96AD1BC940CA56  
  4. iv =264E495D7649F9F8  
  5.   
  6. E:OpenSSLfoo>xxd a.des3salt  
  7. 0000000: 5361 6c74 6564 5f5f a254 906c a471 c1d4  Salted__.T.l.q..  
  8. 0000010: 952e 1995 b60d 1813                      ........  


注意salt和a.des3salt中的a254 906c a471 c1d4是一样子的。我以前用POCO写了个加密程序,加密了一个文件,然后又用openssl加密了那个相同的文件,结果加密后的文件不一样,原来是盐值在搞怪。加盐,就是加调料,所以结果不一样了。

盐值(salt)不需要保密,为什么,看看《应用密码学》吧。

-e / -d         encrypt / decrypt 加解密。默认是加密,-d明确指定是解密。

  1. E:OpenSSLfoo>openssl enc -d -des3 -pass pass:123  -in a.des3salt -out a.dec  
  2.   
  3. E:OpenSSLfoo>diff a.txt a.dec  
  4.   
  5. E:OpenSSLfoo>  


-a              对加密后的数据进行base64编码,或解密前,先对数据进行base64解码。 -base64-a选项相同。

  1. E:OpenSSLfoo>openssl enc -des3 -a -k 123 -in a.txt -out a.des3base64  
  2.   
  3. E:OpenSSLfoo>openssl enc -des3 -d -a -k 123 -in a.des3base64 -out b.txt  
  4.   
  5. E:OpenSSLfoo>diff a.txt b.txt  


-A              如果指定-a 选项,在每一行上进行base64处理。

-k /  -kfile     -k,传统输入密码的方式,-k 123 相当与 -pass pass:123 。-kfile p.txt 相当于 -pass file:p.txt。

-K  key     加密真正使用的key。这和-k 和 -pass有什么区别呢? 其实我们输入的密码并不是加密时使用的密钥,对于分组加密算法来说,密钥是固定的,有64/128/256等,我们也经常见文献里写着,密钥多少多少位。我们输入的密码,在加密算法启动前,会经过运算,得到固定长度用于加密的key,然后在加密。我们可以在选项中手动指定key,key的格式是16进制,算法的不同,key的长度也会不同。

-iv IV      IV是初始化向量,格式是16进制。在分组加密算法中,对第一组数据加密时,我们可以是用初始化向量对其进行处理,已隐藏明文的统计特性。参加下面的工作模式。

-p / -P    print打印出key和iv值。-P只打印出key和iv值,而不进行加解密运算。参考-salt

算法

除了上面提到的des3外,openssl还提供了那些算法呢?

  1. E:OpenSSLfoo>openssl enc -help  

这里是官方文档,做的整理

  1. base64             Base 64  
  2.   
  3. bf-cbc             Blowfish in CBC mode  
  4. bf                 Alias for bf-cbc  
  5. bf-cfb             Blowfish in CFB mode  
  6. bf-ecb             Blowfish in ECB mode  
  7. bf-ofb             Blowfish in OFB mode  
  8.   
  9. cast-cbc           CAST in CBC mode  
  10. cast               Alias for cast-cbc  
  11. cast5-cbc          CAST5 in CBC mode  
  12. cast5-cfb          CAST5 in CFB mode  
  13. cast5-ecb          CAST5 in ECB mode  
  14. cast5-ofb          CAST5 in OFB mode  
  15.   
  16. des-cbc            DES in CBC mode  
  17. des                Alias for des-cbc  
  18. des-cfb            DES in CBC mode  
  19. des-ofb            DES in OFB mode  
  20. des-ecb            DES in ECB mode  
  21.   
  22. des-ede-cbc        Two key triple DES EDE in CBC mode  
  23. des-ede            Two key triple DES EDE in ECB mode  
  24. des-ede-cfb        Two key triple DES EDE in CFB mode  
  25. des-ede-ofb        Two key triple DES EDE in OFB mode  
  26.   
  27. des-ede3-cbc       Three key triple DES EDE in CBC mode  
  28. des-ede3           Three key triple DES EDE in ECB mode  
  29. des3               Alias for des-ede3-cbc  
  30. des-ede3-cfb       Three key triple DES EDE CFB mode  
  31. des-ede3-ofb       Three key triple DES EDE in OFB mode  
  32.   
  33. desx               DESX algorithm.  
  34.   
  35. gost89             GOST 28147-89 in CFB mode (provided by ccgost engine)  
  36. gost89-cnt        `GOST 28147-89 in CNT mode (provided by ccgost engine)  
  37.   
  38. idea-cbc           IDEA algorithm in CBC mode  
  39. idea               same as idea-cbc  
  40. idea-cfb           IDEA in CFB mode  
  41. idea-ecb           IDEA in ECB mode  
  42. idea-ofb           IDEA in OFB mode  
  43.   
  44. rc2-cbc            128 bit RC2 in CBC mode  
  45. rc2                Alias for rc2-cbc  
  46. rc2-cfb            128 bit RC2 in CFB mode  
  47. rc2-ecb            128 bit RC2 in ECB mode  
  48. rc2-ofb            128 bit RC2 in OFB mode  
  49. rc2-64-cbc         64 bit RC2 in CBC mode  
  50. rc2-40-cbc         40 bit RC2 in CBC mode  
  51.   
  52. rc4                128 bit RC4  
  53. rc4-64             64 bit RC4  
  54. rc4-40             40 bit RC4  
  55.   
  56. rc5-cbc            RC5 cipher in CBC mode  
  57. rc5                Alias for rc5-cbc  
  58. rc5-cfb            RC5 cipher in CFB mode  
  59. rc5-ecb            RC5 cipher in ECB mode  
  60. rc5-ofb            RC5 cipher in OFB mode  
  61.   
  62. aes-[128|192|256]-cbc  128/192/256 bit AES in CBC mode  
  63. aes-[128|192|256]      Alias for aes-[128|192|256]-cbc  
  64. aes-[128|192|256]-cfb  128/192/256 bit AES in 128 bit CFB mode  
  65. aes-[128|192|256]-cfb1 128/192/256 bit AES in 1 bit CFB mode  
  66. aes-[128|192|256]-cfb8 128/192/256 bit AES in 8 bit CFB mode  
  67. aes-[128|192|256]-ecb  128/192/256 bit AES in ECB mode  
  68. aes-[128|192|256]-ofb  128/192/256 bit AES in OFB mode  

注意上面的ecb,cbc,ofb,cfb等,这些是分组算法的工作模式,默认为cbc。

ECB是最简单的,如图

openssl enc 加解密第1张

CBC是应用最广泛的,如图

openssl enc 加解密第2张

在加密第一组数据的时候,使用了IV,且每组数据加加密前都与前组加密后的数据进行异或,提高了安全性。不同的IV可以产生不同的密文(这和不同的salt可以产生不同的密文,应该不矛盾,本人菜鸟^_^),这样明文的统计特征会在密文中消散掉。IV不需要保密

免责声明:文章转载自《openssl enc 加解密》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Auto Mapper02《demo》从word中复制内容包含图片到fckeditor编辑器中下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java script btoa与atob的

javascript原生的api本来就支持,Base64,但是由于之前的javascript局限性,导致Base64基本中看不中用。当前html5标准正式化之际,Base64将有较大的转型空间,对于Html5 Api中出现的如FileReader Api, 拖拽上传,甚至是Canvas,Video截图都可以实现。 好了,前言说了一大堆,Base64转码和解...

椭圆曲线密码学在OpenSSL中的实现

有限域上的椭圆曲线 这里略去有限域、射影几何等数学背景介绍。先给出实数域空间上椭圆曲线的一般形式: [y^2z + a_1xyz + a_3yz^2 = x^3 + a_2x^2z + a_4xz^2 + a_6z^3 ] 以上式子中,(x,y,z)均为变元。而令(z=1), 则可以得到平面上的椭圆曲线(Ep(x,y))。 对平面上椭圆曲线上的点P,...

图的遍历算法(2)

  这是《计算机算法分析与设计》课件第二章“图与遍历算法”内容的总结。   1.关于有向图   有向图的表示也可以用邻接矩阵和关联矩阵,邻接矩阵的表示和无向图一样,但是关联矩阵为指明边的方向,只用 0,1 两个元素是不够的,可以增加一个元素-1。若i是j的始点,赋值为1,若i是j的终点,赋值为-1,其余赋值为0。   有向图 D 说是连通的是指其基础图是连...

单麦克风AI降噪模块及解决方案

前记   随着以AI为核心的智能设备的广泛发展,语音这个非常重要的入口一直是很多厂商争夺的市场。作为音频采集的前端设备,能采集到的距离远,清晰度高,无噪声的信号是一个非常重要的能力。这样就对音频前端降噪提出了新的需求,需要前端降噪更加智能化,更加深度化,更加低成本化。  面对市场的强劲需求和市场的不断变化,该团队在降噪算法领域经过多年的技术积累和沉淀,把降...

python -第七节课之加密操作之md5加密和base64类型

常用的加密方式就是md5加密 实际场景:用户管理数据存到数据库,注册的时候账号和密码不能存成铭文要转成加密的形式 python使用的模块hashlib 举例子 import hashlibs='cdsdsa's=s.encode()#字符串转成bytes类型m=hashlib.md5(s)#md5方法必须传一个bytes类型res=m.hexdigest(...

在vue项目中引入Base64

安装:npm install --save js-base64 在组件中直接引入let Base64 = require('js-base64').Base64; 使用: Base64.decode('dsdsdSd'); Base64.decode('3232131'); Base64.encode('6545hgdfg'); Base64.enc...