1. .MD5和SHA1加密算法: 用于计算出一段不可逆向计算的数值,以此来验证该文件是否被修改的.
  • md5:

生成md5值:md5sum a.txt b.txt > md5sum

校验数据正确性:md5sum -c md5sum

用md5算法计算文件a.txt的哈西值,输出到stdout:

openssl dgst -md5a.txt  或    openssl dgst -md5 -out a.txt a.txt 或    openssl dgst -md5 a.txt > sha1sum

用md5算法计算文件a.txt的哈西值,输出到文件sha1sum.txt:

openssl md5 -out sha1sum a.txt

  • sha1sum:

生成sha1值:sha1sum a.txt b.txt > sha1sum

校验数据正确性:sha1sum -c sha1sum

用SHA1算法计算文件a.txt的哈西值,输出到stdout:

openssl dgst -sha1 a.txt  或    openssl dgst -sha1 -out a.txt a.txt 或    openssl dgst -sha1 a.txt > sha1sum

用SHA1算法计算文件a.txt的哈西值,输出到文件sha1sum :

openssl sha1 -out sha1sum a.txt

2. AES、DES:aes/des加密速度快,适合大量数据. des容易破解,一般用3重des,后来又出现了更快更安全的aes.

OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、             Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式 (OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则       是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。

openssl --help

-in <file>     input file
-out <file>    output file
-pass <arg>    pass phrase source
-e             encrypt
-d             decrypt
-a/-base64     base64 encode/decode, depending on encryption flag
-k             passphrase is the next argument
-kfile         passphrase is the first line of the file argument
-md            the next argument is the md to use to create a keyfrom a passphrase.  One of md2, md5, sha or sha1
-S             salt in hex is the next argument
-K/-iv         key/iv in hex is the next argument
-[pP]          print the iv/key (then exit if -P)
-bufsize <n>   buffer size
-nopad         disable standard block padding
-engine e      use engine e, possibly a hardware device.

[in/out]

这两个参数指定输入文件和输出文件,加密是输入文件是明文,输出文件是密文;解密时输入文件是密文,输出文件是明文。

[pass]

指定密码的输入方式,共有五种方式:命令行输入(stdin)、文件输入(file)、环境变量输入(var)、文件描述符输入(fd)、标准输入(stdin)。默认是标准输入,及从键盘输入。

[e/d]

e:加密, d:解密  默认是加密

[-a/-base64]

由于文件加密后是二进制形式,不方便查看,使用该参数可以使加密后的内容经过base64编码,使其可读;同样,解密时需要先进行base64解编码,然后进行解密操作。

[-k/-kfile]

兼容以前版本,指定密码输入方式,现已被pass参数取代

[md]

指定密钥生成的摘要算法,用户输入的口令不能直接作为文件加密的密钥,而是经过摘要算法做转换,此参数指定摘要算法,默认md5

[-S]

为了增强安全性,在把用户密码转换成加密密钥的时候需要使用盐值,默认盐值随机生成。使用该参数,则盐值由用户指定。也可指用-nosalt指定不使用盐值,但降低了安全性,不推荐使用。

[K/IV]

默认文件的加密密钥的Key和IV值是有用户输入的密码经过转化生成的,但也可以由用户自己指定Key/IV值,此时pass参数不起作用

[pP]

加上p参数会打印文件密钥Key和IV值,加上P参数也会打印文件密钥Key和IV值,但不进行真正的加解密操作

[bufsize]

读写文件的I/O缓存,一般不需要指定

[-nopad]

不使用补齐,这就需要输入的数据长度是使用加密算法的分组大小的倍数

[engine]

指定三方加密设备,没有环境,暂不实验

对称加密实例:

1、只对文件进行base64编码,而不使用加解密

/*对文件进行base64编码*/
openssl enc -base64 -e -in a.txt -out c.base64
/*对base64格式文件进行解密操作*/
openssl enc -base64 -d -in c.base64 -out d.txt
/*使用diff命令查看可知解码前后明文一样*/
diff a.txt d.txt

2、不同方式的密码输入方式

加密密文不可读:openssl enc -e -aes-128-cbc -in a.txt -out c.txt -pass pass:123456 -S 123-p 或openssl aes-128-cbc -e -in a.txt -out c.txt -pass pass:123456 -S 123 -p

加密密文可读:openssl enc -e -aes-128-cbc -in a.txt -out c.txt -p pass:123456 -S 123

解密:penssl enc -d -aes-128-cbc -in a.txt -out  d.txt-p pass:123456 -S 123

可以看到上述我们执行的是enc -help命令,enc是什么东西?原来openssl提供了两种方式调用对称加密算法:

一种就是直接调用对称加密指令,例如:

openssl des-cbc -in plain.txt -out encrypt.txt -pass pass:12345678

另外一种是使用enc的方式,即用对称加密指令作为enc指令的参数,例如:.

openssl enc -des-cbc -in plain.txt -out encrypt.txt -pass pass:12345678

上述两条指令完成的功能是一样的,而且其参数也是一样。原来enc是作用是什么呢?简单来说,为了省事……。

openssl提供了N多的对称加密算法指令,enc就是把这些N多的对称的加密算法指令统一集成到enc指令中。当用户使用时,只需使用enc,指定加密算法,就是完成单独的加密算法指令完成的操作。而且,enc中可以指定的对称加密算法指令可能并没有以单独指令的形式存在。所有笔者建议使用enc这种方式。

当然,虽然openssl为我们提供的对称加密算法指令虽然功能强大,但并不完整,例如对称加密算法不支持76位的RC2加解密或者84位的RC4加解密灯功能。如果想灵活的使用这些加密算法和模式,就需要学习openssl提供的API

/*命令行输入,密码123456*/
openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass pass:123456
/*文件输入,密码123456*/
echo 123456 > passwd.txt
openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass file:passwd.txt
/*环境变量输入,密码123456*/passwd=123456export passwdopenssl enc -aes-128-cbc -in plain.txt -out out.txt -pass env:passwd/*从文件描述输入*/ openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass fd:1  /*从标准输入输入*/ openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass stdin 

3、固定salt值加密

xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P
salt=32F5C360F21FC12D
key=D7E1499A578490DF940D99CAE2E29EB1
iv =78EEB538897CAF045F807A97F3CFF498
xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P
salt=DAA482697BECAB46
key=9FF8A41E4AC011FA84032F14B5B88BAE
iv =202E38A43573F752CCD294EB8A0583E7
xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P -S 123
salt=1230000000000000
key=50E1723DC328D98F133E321FC2908B78
iv =1528E9AD498FF118AB7ECB3025AD0DC6
xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P -S 123
salt=1230000000000000
key=50E1723DC328D98F133E321FC2908B78
iv =1528E9AD498FF118AB7ECB3025AD0DC6
xlzh@cmos:~$ 

可以看到,不使用-S参数,salt参数随机生成,key和iv值也不断变化,当slat值固定时,key和iv值也是固定的。

4、加解密后过程使用base64编解码

/*使用-a参数加密后使用base64编码*/
xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -a -out encrypt.txt -pass pass:123456
/*使用-a参数解密前使用base64解码*/
xlzh@cmos:~$ openssl enc -aes-128-cbc -in encrypt.txt -d -a -out plain1.txt -pass pass:123456
/*文件一样*/
xlzh@cmos:~$ diff plain.txt plain1.txt
/*加密后文件使用了base64编码*/
xlzh@cmos:~$ cat encrypt.txt
U2FsdGVkX19KbCj9GMI1TBOQjP8JJcefIUH1tHwf/Z4=

5、手动指定Key和IV值

/*手动指定key和iv值,salt固定*/
xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt  -K 1223 -iv f123 -p
salt=0B00000000000000
key=12230000000000000000000000000000
iv =F1230000000000000000000000000000
/*指定pass密码,不起作用,注意Key和IV值是16进制*/
xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt  -K 1223 -iv f123 -p -pass pass:123456
salt=F502F4B8DE62E0E5
key=12230000000000000000000000000000
iv =F1230000000000000000000000000000

3,RSA应用

产生1024位RSA私匙,用3DES加密它,口令为trousers,输出到文件rsaprivatekey.pem

# openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024

从文件rsaprivatekey.pem读取私匙,用口令trousers解密,生成的公钥匙输出到文件rsapublickey.pem

# openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem

用公钥匙rsapublickey.pem加密文件plain.txt,输出到文件cipher.txt

# openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt

使用私钥匙rsaprivatekey.pem解密密文cipher.txt,输出到文件plain.txt

# openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt

用私钥匙rsaprivatekey.pem给文件plain.txt签名,输出到文件signature.bin

# openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin

用公钥匙rsapublickey.pem验证签名signature.bin,输出到文件plain.txt

# openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain

从X.509证书文件cert.pem中获取公钥匙,用3DES加密mail.txt,输出到文件mail.enc

# openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem

从X.509证书文件cert.pem中获取接收人的公钥匙,用私钥匙key.pem解密S/MIME消息mail.enc,结果输出到文件mail.txt

# openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt

cert.pem为X.509证书文件,用私匙key,pem为mail.txt签名,证书被包含在S/MIME消息中,输出到文件mail.sgn

# openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn

验证S/MIME消息mail.sgn,输出到文件mail.txt,签名者的证书应该作为S/MIME消息的一部分包含在mail.sgn中

# openssl smime -verify -in mail.sgn -out mail.txt
4

申请证书

SSL常用于身份验证、数据加密等应用中,要使用SSL,我们密码有自己的证书。数字证书一般要向专业的认证公司(如VeriSign)申请,并且都是收费的,某些情况下,我们只是想使用加密的数据通信,而不在乎认证,这时就可以自己制作一个证书,自己制作一个证书,有两种方式,一种是Self Signed,另一种是自己制作一个CA,然后由这个CA,来发布我们需要的证书。下面分别介绍这两个方法。

生成Self Signed证书

#生成一个key,你的私钥,openssl会提示你输入一个密码,可以输入,也可以不输,

#输入的话,以后每次使用这个key的时候都要输入密码,安全起见,还是应该有一个密码保护

#openssl genrsa -des3 -out selfsign.key 4096

#使用上面生成的key,生成一个certificate signing request (CSR)

#如果你的key有密码保护,openssl首先会询问你的密码,然后询问你一系列问题,

#其中Common Name(CN)是最重要的,它代表你的证书要代表的目标,如果你为网站申请的证书,就要添你的域名。

#openssl req -new -key selfsign.key -out selfsign.csr

#生成Self Signed证书selfsign.crt就是我们生成的证书了

#openssl x509 -req -days 365 -in selfsign.csr -signkey selfsign.key -out selfsign.crt

#另外一个比较简单的方法就是用下面的命令,一次生成key和证书

#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

生成自己的CA (Certificate Authority)

CA是证书的发布者,CA可以发布其他人的证书,把CA的证书加入系统信任的根证书后,由CA发布的证书也被系统所信任,所以,CA的key是必须小心保护的,一般都要加密保护,并且限制为root权限读写。

#生成CA的key

#openssl genrsa -des3 -out ca.key 4096

#生成CA的证书

#openssl req -new -x509 -days 365 -key ca.key -out ca.crt

#生成我们的key和CSR这两步与上面Self Signed中是一样的

#openssl genrsa -des3 -out myserver.key 4096

#openssl req -new -key myserver.key -out myserver.csr

#使用ca的证书和key,生成我们的证书

#这里的set_serial指明了证书的序号,如果证书过期了(365天后),

#或者证书key泄漏了,需要重新发证的时候,就要加1

#openssl x509 -req -days 365 -in myserver.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out myserver.crt

查看证书

#查看KEY信息

#openssl rsa -noout -text -in myserver.key

#查看CSR信息

#openssl req -noout -text -in myserver.csr

#查看证书信息

#openssl x509 -noout -text -in ca.crt

#验证证书

#会提示self signed

#openssl verify selfsign.crt

#因为myserver.crt是幅ca.crt发布的,所以会验证成功

#openssl verify -CAfile ca.crt myserver.crt

去掉key的密码保护

#有时候每次都要输入密码太繁琐了,可以把Key的保护密码去掉

#openssl rsa -in myserver.key -out server.key.insecure

不同格式证书的转换

一般证书有三种格式:

PEM(.pem)前面命令生成的都是这种格式,

DER(.cer .der) Windows上常见

PKCS#12文件(.pfx .p12) Mac上常见

# PEM转换为DER

#openssl x509 -outform der -in myserver.crt -out myserver.der

# DER转换为PEM

#openssl x509 -inform der -in myserver.cer -out myserver.pem

# PEM转换为PKCS

#openssl pkcs12 -export -out myserver.pfx -inkey myserver.key -in myserver.crt -certfile ca.crt

# PKCS转换为PEM

#openssl pkcs12 -in myserver.pfx -out myserver2.pem -nodes

测试证书

Openssl提供了简单的client和server工具,可以用来模拟SSL连接,做测试使用。

#连接到远程服务器

#openssl s_client -connect www.google.com.hk:443

#模拟的HTTPS服务,可以返回Openssl相关信息

# -accept用来指定监听的端口号

# -cert -key用来指定提供服务的key和证书

#openssl s_server -accept 443 -cert myserver.crt -key myserver.key -www

#可以将key和证书写到同一个文件中

#cat myserver.crt myserver.key > myserver.pem

#使用的时候只提供一个参数就可以了

#openssl s_server -accept 443 -cert myserver.pem -www

#可以将服务器的证书保存下来

#openssl s_client -connect www.google.com.hk:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > remoteserver.pem

#转换成DER文件,就可以在Windows下直接查看了

#openssl x509 -outform der -in remoteserver.pem -out remoteserver.cer

openssl RSA、AES、DES、MD5、SHA1,CA相关推荐

  1. 对称加密DES、3DES、AES的计算过程

    目录 一.流密码与分组密码 二.DES计算过程 密钥操作 明文操作 1)明文编排 2)16轮迭代 三.3DES 四.AES(也叫RIJNDAEL算法) State 密钥编排 循环4​​​​​​​轮  ...

  2. AES、DES、RSA、base64、MD5、SHA加密

    对称加密: 需要对加密和解密使用相同密钥的加密算法.由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用.对称性加密也称为密钥加密. 所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥 ...

  3. 对称加密、非对称加密、DES、AES、RSA、OpenSSL、数字签名、防篡改

    本公众号分享的所有技术仅用于学习交流,请勿用于其他非法活动,如果错漏,欢迎留言指正 <加密与解密>第4版 加解密 安全领域的重要分支和基础设施 互联网重要数据的传输需要加解密 TCP/IP ...

  4. 常见安全算法(RSA、AES、MD5等)原理及实现和win10下OpenSSL库的使用

    一.安全算法概述 安全算法通常被人们分为对称加密算法和非对称加密算法两类. 对称加密算法是指加密秘钥和解密秘钥相同的算法,即用什么加密就用什么解密,早期的安全算法均属于这一类.目前常见的对称加密算法有 ...

  5. Python代码实现MD5、AES对称加密和RSA非对称加密以及OpenSSl实践

    1.MD5加密算法 1.1 MD5加密的特点 不可逆运算 对不同的数据加密的结果是定长的32位和16位字符(不管文件多大都一样) 对相同的数据加密,得到的结果是一样的(也就是复制). 抗修改性 :信息 ...

  6. 常见加密工具类Base64、DES、AES、RSA、MD5汇总

    文章目录 引言 1.Base64加密 2.DES加密 3.AES加密 4.RSA加密 5.MD5加密 引言 项目中经常会用到Base64.DES.AES.RSA.MD5几种加解密方式,每次都要去网上搜 ...

  7. 常用加密解密算法【RSA、AES、DES、MD5】介绍和使用

    为了防止我们的数据泄露,我们往往会对数据进行加密,特别是敏感数据,我们要求的安全性更高.下面将介绍几种常用的加密算法使用.这些算法的加密对象都是基于二进制数据,如果要加密字符串就使用统一编码(如:ut ...

  8. java编码解码加密解密--md5、SHA-256、SHA-512、MAC、DES、AES、RSA

    md5 md5是一种散列算法,不可逆,是一种消息摘要算法,生成的字节数组的长度是128位,也就是等于16个字节,那么有的字节转化为字符之后,这些字符不一定是存在于ascii码之中,通常为了便于输出,我 ...

  9. JS常见加密 AES、DES、RSA、MD5、SHAI、HMAC、Base64(编码) - Python/JS实现

    主要加密算法前言 本文仅仅介绍了常见的一些JS加密,并记录了JS和Python的实现方式 常见的加密算法基本分为这几类: (1)base64编码伪加密 (2)线性散列算法(签名算法)MD5 (3)安全 ...

最新文章

  1. 新兴经济体助力BCH长足发展
  2. mac找不到mysql数据库_mac下mysql升级后找回丢失数据库
  3. 【机器视觉】 dev_open_dialog算子
  4. 有钱了该不该提前还清房贷?
  5. origin如何绘制双y轴曲线_Origin用矩阵绘制多层曲面映射图
  6. res.status === 200含义
  7. 硬件nat关闭还是开启_超能课堂(173):AfterBurner不止超频,还是绝佳的游戏伴侣...
  8. [mount]linux 挂载时 mount: wrong fs type, bad option, bad superblock on /dev/sdb
  9. 外媒:iPhone 8售价太高 中国消费者热情程度不高
  10. 护壁桩嵌入深度_钻孔灌注桩嵌岩深度最少多少
  11. idea配置jfinal_intellij idea如何创建JFinal项目
  12. Atitit 局部图查找大图 方法 与 说明
  13. 重塑层次化索引stack
  14. Python:下载安装包
  15. 单片机控制步进电机正反转c语言程序,单片机控制步进电机1步10步100步正反转...
  16. 超全!我常用的70个数据分析网址
  17. SublimeText3安装中文插件
  18. key文件转化ppt
  19. 区块链进化论:极客与开源 - 区块链大航海时代
  20. 关于睡眠,你需要了解的3件事

热门文章

  1. 十进制转化为二进制(栈算法)
  2. 计算机科学的一个字节是几位,什么是字节--字节换算
  3. GM8913型DC平衡双向控制器LVTTL转FPD-LINK
  4. [JAVA]从零开始的“桌面宠物”之路(一):动画效果
  5. oracle查看锁定任务
  6. 基于大数据的优质服务 微车将构建汽车互联网新生态
  7. 计算机网络中删除自己的共享,如何删除我的电脑中共享文档
  8. ios开发之autolayout 第三方框架Masonry
  9. 使用js定时器实现倒计时功能
  10. 名风新浪博客评论软件-自动评论推广