当前位置: 首页 > news >正文

Java加解密(八)工具篇

目录

  • Java加解密实用工具
    • 1 OpenSSL
    • 2 Keytool
    • 3 XCA
    • 4 KeyStore Explorer

Java加解密实用工具

1 OpenSSL

OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。
例如Apache 使用它加密 HTTPS,OpenSSH 使用它加密 SSH。

OpenSSL整个软件包大概可以分成三个主要的功能部分:

  1. SSL协议库
    OpenSSL实现了SSL协议的SSLv2和SSLv3,支持了其中绝大部分算法协议。OpenSSL也实现了TLSv1.0,TLS是SSLv3的标准化版,虽然区别不大,但毕竟有很多细节不尽相同。
    虽然已经有众多的软件实现了OpenSSL的功能,但是OpenSSL里面实现的SSL协议能够让我们对SSL协议有一个更加清楚的认识,因为至少存在两点:一是OpenSSL实现的SSL协议是开放源代码的,我们可以追究SSL协议实现的每一个细节;二是OpenSSL实现的SSL协议是纯粹的SSL协议,没有跟其它协议(如HTTP)协议结合在一起,澄清了SSL协议的本来面目。
  2. 应用程序
    • 密钥证书管理
      密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。
      首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。
      在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。
      事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。
    • OpenSSL对于随机数的生成和管理也提供了一整套的解决方法和支持API函数。随机数的好坏是决定一个密钥是否安全的重要前提。
  3. 密码算法库
    • 对称加密
      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一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
    • 信息摘要
      OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法。此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。

OpenSSL 包含一个命令行工具用来完成 OpenSSL 库中的所有功能,官网及下载地址:
https://www.openssl.org/
http://slproweb.com/products/Win32OpenSSL.html

2 Keytool

keytool 是JDK 提供的证书相关操作的命令行工具,只要安装JDK 并且配置好相应的环境变量或者切换工作目录至keytool工具目录下,就可以在命令窗口运行。

C:\Users\Administrator>keytool -help
密钥和证书管理工具命令:-certreq            生成证书请求-changealias        更改条目的别名-delete             删除条目-exportcert         导出证书-genkeypair         生成密钥对-genseckey          生成密钥-gencert            根据证书请求生成证书-importcert         导入证书或证书链-importpass         导入口令-importkeystore     从其他密钥库导入一个或所有条目-keypasswd          更改条目的密钥口令-list               列出密钥库中的条目-printcert          打印证书内容-printcertreq       打印证书请求的内容-printcrl           打印 CRL 文件的内容-storepasswd        更改密钥库的存储口令使用 "keytool -command_name -help" 获取 command_name 的用法C:\Users\Administrator>
C:\Users\Administrator>keytool -certreq -help
keytool -certreq [OPTION]...生成证书请求选项:-alias <alias>                  要处理的条目的别名-sigalg <sigalg>                签名算法名称-file <filename>                输出文件名-keypass <arg>                  密钥口令-keystore <keystore>            密钥库名称-dname <dname>                  唯一判别名-storepass <arg>                密钥库口令-storetype <storetype>          密钥库类型-providername <providername>    提供方名称-providerclass <providerclass>  提供方类名-providerarg <arg>              提供方参数-providerpath <pathlist>        提供方类路径-v                              详细输出-protected                      通过受保护的机制的口令
C:\Users\Administrator>keytool -changealias -help
keytool -changealias [OPTION]...更改条目的别名选项:-alias <alias>                  要处理的条目的别名
-destalias <destalias>          目标别名
-keypass <arg>                  密钥口令
-keystore <keystore>            密钥库名称
-storepass <arg>                密钥库口令
-storetype <storetype>          密钥库类型
-providername <providername>    提供方名称
-providerclass <providerclass>  提供方类名
-providerarg <arg>              提供方参数
-providerpath <pathlist>        提供方类路径
-v                              详细输出
-protected                      通过受保护的机制的口令

3 XCA

XCA(X Certificate and key management) 是作为证书和密钥存储,以及作为签发证书的签名应用程序,是一个开源的工具,底层还是基于openssl的类库和API的。
首先需要下载并安装工具,官网地址为:https://www.hohnstaedt.de/xca/index.php/download
在这里插入图片描述

4 KeyStore Explorer

KeyStore Explorer KeyStoreExplorer是Java命令行程序keytool和jarsigner的开源GUI替代工具。KeyStore Explorer通过直观的图形用户界面展示其丰富的功能。

首先需要下载并安装工具,官网地址为:https://keystore-explorer.org/downloads.html
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/39029.html

相关文章:

  • Go框架三件套(Web/RPC/ORM)
  • HR问:假如公司给不到你期望的薪资怎么办?这个问题该如何体面地回答?
  • LearnOpenGL-高级OpenGL-2.模板测试
  • 【Git从入门到精通】Git入门
  • 软件测试18
  • C语言实现快速排序(hoare法、挖坑法、前后指针法与非递归实现)——不看后悔系列
  • 如何为系统可靠性的量化提供依据
  • 量化投资中的因子是什么?因子是如何分类的,包括哪些?
  • 力扣-修复表中的名字
  • 【博客633】linux vxlan设备工作原理
  • 3.12学习周报
  • 电力电子中逐波限流控制以及dsp实现
  • 【数据结构】 顺序表
  • Elasticsearch 集群规划- 单台机器核心数计算公式
  • Tesla都使用什么编程语言?
  • 1143. 最长公共子序列——【Leetcode每日刷题】
  • 【并发基础】线程的通知与等待:obj.wait()、obj.notify()、obj.notifyAll()详解
  • css黏性定位-实现商城的分类滚动的标题吸附
  • @Component和@bean注解在容器中创建实例区别
  • 不写注释就是垃圾
  • 深信服一面
  • 【C语言】深度理解指针(中)
  • 步进电机运动八大算法
  • 如果你持续大量的教坏ChatGPT,它确实会变坏
  • opencv学习(二)图像阈值和平滑处理
  • 【含源码】用python做游戏有多简单好玩
  • C++常用函数
  • Android Framework基础到深入篇
  • 【Go进阶训练营】聊一下go的gc原理
  • 英飞凌Tricore原理及应用介绍05_中断处理之中断路由(IR)模块详解