zoukankan      html  css  js  c++  java
  • openssl加解密实战

    一、概念

    1、加密有两种类型

    密钥加密(secret-key encryption)使用相同的密钥进行加密和解密,也叫对称加密
    公钥加密(public-key encryption)使用不同的密钥进行加密和解密,也叫非对称加密
    密钥加密速度更快,公钥加密更加安全,因为它解决了安全共享密钥的问题

    2、公钥加密使用两组密钥,称为密钥对

    一个是公钥,用于加密,可以与你想要秘密通信的任何人自由共享、交换;
    一个是私钥,用于解密,应该是一个秘密,永远不会共享。
    如你想与别人交流敏感文件,可将你的公钥发送给他,他使用公钥加密文件,然后将加密后的文件其发送给你。你解密发件人的加密文件的唯一方法,是使用私钥进行解密。

    二、公钥加密/非对称加密

    1、生成私钥

    #定义私钥文件的名字
    export PRIVATE_KEY=liking_private
    #定义公钥文件的名字
    export PUBLIC_KEY=liking_public
    #生成私钥
    openssl genrsa -aes128 -out ${PRIVATE_KEY}.pem 1024
    

    2、查看私钥

    openssl rsa -in ${PRIVATE_KEY}.pem -noout -text
    hexdump -C ./${PRIVATE_KEY}.pem
    

    3、提取公钥

    openssl rsa -in ${PRIVATE_KEY}.pem -pubout > ${PUBLIC_KEY}.pem

    4、查看公钥

    openssl rsa -in ${PUBLIC_KEY}.pem -pubin -text -noout
    hexdump -C ./${PUBLIC_KEY}.pem

    5、使用公钥加密文件

    以下脚本可以对多个文件进行加密:

    vim liking_enc.sh
    #!/bin/bash
    export PRIVATE_KEY=liking_private
    export PUBLIC_KEY=liking_public
    export FILES="oratopjk oratopts oratopwy oratopzz sqlplusjk sqlplusts sqlpluswy sqlpluszz"
    for file in ${FILES}
    do
      openssl rsautl -encrypt -inkey ${PUBLIC_KEY}.pem -pubin -in ${file} -out ${file}.enc
      rm -rf ${file}
    done
    

    注1:-inkey指定密钥,默认是私钥,再加-pubin表示指定公钥
    注2:rsautl只能对短小的文件进行操作,否则将报"data too large for key size"
    hexdump -C ./${file}.enc

    6、使用私钥解密文件

    以下脚本可以对多个文件进行解密:

    vim liking_dec.sh
    #!/bin/bash
    export PRIVATE_KEY=liking_private
    export PUBLIC_KEY=liking_public
    export FILES="oratopjk oratopts oratopwy oratopzz sqlplusjk sqlplusts sqlpluswy sqlpluszz"
    for file in ${FILES}
    do
      openssl rsautl -decrypt -inkey ${PRIVATE_KEY}.pem -in ${file}.enc -out ${file}
      rm ${file}.enc
    done
    chmod +x ${FILES}
    

    三、密钥加密/对称加密

    1、加密

    openssl enc -e -aes-128-ecb -in ${FILE_NAME} -out ${FILE_NAME}.enc -pass pass:passw0rd -p

    2、解密

    openssl enc -d -aes-128-ecb -in ${FILE_NAME}.enc -out ${FILE_NAME} -pass pass:passw0rd -p

    3、批量文件压缩、加解密操作

    #压缩并加密一组文件如x、y,生成文件xy
    tar cvfz - x y | openssl enc -e -aes-128-ecb -out xy -pass pass:passw0rd
    #解压缩并解密文件xy,恢复为源文件x、y
    openssl enc -d -aes-128-ecb -in xy -pass pass:passw0rd | tar xvfz -
    

    4、批量文件压缩、加解密操作:【其他参考】

    tar cvfz - x y | openssl des3 -salt -k passw0rd -out xy
    openssl des3 -d -k passw0rd -salt -in xy | tar xvfz -
    

    四、总结

    以上可以看出,在工作中选择加密方式的策略如下:
    1、如果追求安全、无痕,则采用非对称加密,自始至终没有明文密码痕迹,但稍显复杂,且以上方法只能加密小文件。
    2、如果追求简单、实用,则采用对称加密,一个命令即可实现,但是命令行历史会暴露密码明文。

  • 相关阅读:
    app接口测试
    鼠标右键添加"在此处打开命令窗口"
    解决Maven的Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart
    Linux机器之间复制文件和目录方式&Linux的scp命令详解
    Java动态代理总结
    解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
    Elasticsearch使用filter进行匹配关系and,or,not,range查询
    阿里Java开发规范&谷歌Java开发规范&华为Java开发规范&Tab键和空格比较&Eclipse的Tab键设置 总结
    Kafka连接SparkStreaming的两种方式
    IntelliJ IDEA导入多个eclipse项目到同一个workspace下
  • 原文地址:https://www.cnblogs.com/likingzi/p/15773093.html
Copyright © 2011-2022 走看看