兜兜    2019-02-27 22:59:30    2019-11-14 14:33:50   

openssl 数字签名 加密
`简单介绍:` `公钥加密,私钥解密(数据的安全性):发送方使用接收方的公钥加密的密文,仅有接收方的私钥才可解密,保证了数据的安全。(公私钥加解密的对象是对称加密算法的密码文件或钥匙,对称加密算法加密数据文件)` `私钥签名,公钥验签(数据的不可抵赖性/数据的完整性):接收方使用发送方的公钥验证数字签名(发送方通过自己的私钥对数据摘要信息做签名),验证成功,则数据是不可抵赖。接收方对数据内容做摘要信息同发送方的数字签名的摘要信息做对比,摘要信息一致,则数据是完整无篡改的。` ### openssl使用对称加密算法加密大文件 1、使用aes-128-cbc算法加密文件: ```bash $ openssl enc -e -aes-128-cbc -in abc.txt -out enc_abc.txt ``` 2、使用aes-128-cbc算法解密文件: ```bash $ openssl enc -d -aes-128-cbc -in enc_abc.txt -out abc.txt ``` 3、使用aes-128-cbc算法免交互输入密码加密文件: ```bash $ openssl enc -e -aes-128-cbc -in abc.txt -out enc_abc.txt -pass pass:123456 ``` 4、使用aes-128-cbc算法使用密码文件解密文件: ```bash $ echo 123456 > passwd $ openssl enc -d -aes-128-cbc -in enc_abc.txt -out abc.txt -pass file:123456 ``` ``` 对称加密的使用中,-pass本质是采用key和iv向量进行加密的,-pass会转换成key和iv ``` 5、使用aes-128-cbc算法指定IV和KEY进行加密 ```bash $ openssl enc -e -aes-128-cbc -K 12345 -iv f888 -in abc.txt -out enc_abc.txt -p ``` 6、使用aes-128-cbc算法指定IV和KEY进行解密 ```bash $ openssl enc -d -aes-128-cbc -K 12345 -iv f888 -in enc_abc.txt -out abc.txt ``` 7、不加盐值进行加密(默认会加入随机盐值,如果不加入盐值同时密码一样,则每次加密的密文都是一样的) ```bash $ openssl enc -e -aes-128-cbc -nosalt -in abc.txt -out enc_abc.txt -p ``` ``` key=E10ADC3949BA59ABBE56E057F20F883E iv =65B4AD270B3B98098D256AB32F5B8FBA ``` 8、不加盐值进行解密 ```bash $ openssl enc -d -aes-128-cbc -nosalt -in enc_abc.txt -out abc7.txt -p ``` ``` key=81DC9BDB52D04DC20036DBD8313ED055 iv =CC5776D16A1FB6E4AFA34B18395DA656 ```    ### openssl使用非对称加密算法加密小文件 生成私钥 ```bash $ openssl genrsa -out rsa.key 2048 ``` 通过私钥导出公钥 ```bash $ openssl rsa -in rsa.key -pubout -out pub.key ``` 公钥加密文件 ```bash $ openssl rsautl -encrypt -inkey pub.key -pubin -in abc.txt -out abc_rsa.txt ``` 私钥解密文件 ```bash $ openssl rsautl -decrypt -inkey rsa.key -in abc_rsa.txt -out abc_rsa_de.txt ```    ### openssl使用对称加密算法和非对称加密算法加密大文件 `这里以发送方A和接收方B为例` #### 发送方A A.1 生成随机密码文件 ```bash $ openssl rand -hex 64 -out key.bin ``` A.2 使用加密算法aes-256-cbc和密码文件加密大文件 ```bash $ openssl enc -aes-256-cbc -salt -in largefile.pdf -out largefile.pdf.enc -pass file:./bin.key ``` A.3 使用接收方B的公钥加密密码文件 ```bash $ openssl rsautl -encrypt -inkey publickey.pem -pubin -in key.bin -out key.bin.enc ``` A.4 发送方A发送加密文件 largefile.pdf.enc(对称加密文件)和key.bin.enc(非对称加密文件/公钥加密文件)以及加密算法-aes-256-cbc给接收方B ``` A----largefile.pdf.enc---->B A-------key.bin.enc------->B A---aes-256-cbc加密算法---->B ``` #### 接收方B B.1 使用接收方B的私钥解密密码文件 ```bash $ openssl rsautl -decrypt -inkey privatekey.pem -in key.bin.enc -out key.bin ``` B.2 使用解密算法aes-256-cbc以及密码文件解密文件 ```bash $ openssl enc -d -aes-256-cbc -in largefile.pdf.enc -out largefile.pdf -pass file:./bin.key ```    ### openssl使用非对称加密做数字签名(私钥签名,公钥验签) `注意:这里只是说明验签过程,没有对data.txt文件进行加密传送,加密请看上面` #### 发送方A 生成数字签名 ```bash $ openssl dgst -sha256 -sign private.key -out signature data.txt ``` A把文件和数字签名一起发送给B ``` A-----data.txt--->B A--signature----->B ```    #### 接收方B 验证数字签名 ```bash $ openssl dgst -sha256 -verify public.key -signature signature data.txt ``` ``` Verified OK 验签成功 Verification Failure 验签失败 ```
阅读 1409 评论 0 收藏 0
阅读 1409
评论 0
收藏 0