1、DSA算法概述

DSA算法是美国的国家标准数字签名算法,它只能用户数字签名,而不能用户数据加密和密钥交换。

DSA与RSA的生成方式不同,RSA是使用openssl提供的指令一次性的生成密钥(包括公钥),而通常情况下,DSA是先生成DSA的密钥参数,然后根据密钥参数生成DSA密钥(包括公钥),密钥参数决定了DSA密钥的长度,而且一个密钥参数可以生成多对DSA密钥对。

DSA生成的密钥参数是p、q和g,如果要使用一个DSA密钥,需要首先共享其密钥参数。关于DSA加密的原理,请自行查阅。

2、DSA算法相关指令及用法

openssl中DSA算法指令主要有三个,分别是

指令 功能
dsaparam 生成、处理DSA密钥参数,也可以直接生成DSA密钥
dsa 处理DSA密钥格式的转换
gendsa 根据DSA密钥参数生成一个DSA密钥

从上表可以看到,dsa和gendsa和RSA相关指令中的rsa和genrsa用法相似,但是DSA相关指令中没有提供签名和验证操作的dsautl指令,所以如果需要使用DSA进行签名和验证,需要借助dgst指令,该指令在后续章节中介绍。

2.1 dsaparam指令说明

dsaparam主要用户生成密钥参数,也可以生成DSA密钥其用法如下

xlzh@cmos:~/test$ openssl dsaparam -
unknown option -
dsaparam [options] [bits] <infile >outfile
where options are
-inform arg input format - DER or PEM //
-outform arg output format - DER or PEM //
-in arg input file //
-out arg output file //
-text print as text //
-C Output C code //
-noout no output //
-genkey generate a DSA key //
-rand files to use for random number input //
-engine e use engine e, possibly a hardware device. //
number number of bits to use for generating private key //
xlzh@cmos:~/test$

其参数与RSA相关指令的参数类似,不再一一说明,下面以实例的方式说明其用法

1、生成密钥参数并查看其各个参数值

/*生成1024位的密钥参数*/
xlzh@cmos:~/test$ openssl dsaparam -out DSAP.pem
Generating DSA parameters, bit long prime
This could take some time
....
/*明文查看密钥参数的值*/
xlzh@cmos:~/test$ openssl dsaparam -in DSAP.pem -text -noout

2、密钥参数格式间的转换

/*pem格式的密钥参数转为der格式*/
xlzh@cmos:~/test$ openssl dsaparam -in DSAP.pem -out DSAP.der -outform der
/*der格式的密钥参数转为pem格式*/
xlzh@cmos:~/test$ openssl dsaparam -in DSAP.der -inform der -out R_DSAP.pem
xlzh@cmos:~/test$ diff DSAP.pem R_DSAP.pem

3、直接生成DSA密钥

/*直接生成DSA密钥*/
xlzh@cmos:~/test$ openssl dsaparam -genkey -out DSA.pem
Generating DSA parameters, bit long prime
...
/*查看DSA密钥,可知参数和密钥都被放在输出文件中,说明本质上还是先生成参数,再利用参数生成密钥*/
xlzh@cmos:~/test$ cat DSA.pem
-----BEGIN DSA PARAMETERS-----
MIIBHgKBgQDAG1CFQRqKgrDa21dT2SO0OtvR0wtKo4GWEH+zikTt6eh6S0CdhtqX
PdPiboZdYAJy7HzKHLe0BUkf4dfOOPZBcQrr9sYkJ6q2Zz/jSSA9EnpuQfstdE8a
2wrhIm8mPzBKuWfvz29O6KlBngLfXSfr8Iy2mNAf7NgAntDBMY8yHQIVAMaCaSge
oBHtVo9cUoA5E69f2VqrAoGAbzC9wFnra1lT8Egak4N7YHkBwObN3T2ue3tRM7wE
uv5rNuIyQrSQnp4vqFcnu3lOrP3ZGEJvEZ0kVo7e6LhfO8V0UOqElfhiuwEaZuzZ
22Sodbu7lUx3YMU1QRvk42IudIevi6LWq4zk+sxraAZ3h5rvo8/pKayxtRuKq8Ep
5kU=
-----END DSA PARAMETERS-----
-----BEGIN DSA PRIVATE KEY-----
MIIBugIBAAKBgQDAG1CFQRqKgrDa21dT2SO0OtvR0wtKo4GWEH+zikTt6eh6S0Cd
htqXPdPiboZdYAJy7HzKHLe0BUkf4dfOOPZBcQrr9sYkJ6q2Zz/jSSA9EnpuQfst
dE8a2wrhIm8mPzBKuWfvz29O6KlBngLfXSfr8Iy2mNAf7NgAntDBMY8yHQIVAMaC
aSgeoBHtVo9cUoA5E69f2VqrAoGAbzC9wFnra1lT8Egak4N7YHkBwObN3T2ue3tR
M7wEuv5rNuIyQrSQnp4vqFcnu3lOrP3ZGEJvEZ0kVo7e6LhfO8V0UOqElfhiuwEa
ZuzZ22Sodbu7lUx3YMU1QRvk42IudIevi6LWq4zk+sxraAZ3h5rvo8/pKayxtRuK
q8Ep5kUCgYAh50mq26xMHfVxb/EkZzH+ouM3zPk6x8f9GFZzuUtGfNCzopTxEmw3
yYPaBwiojhZnK/LXVdEui97+D/rqAPCXAfwFhXLR9w7oikid+Ai1A1B+lycCJrim
gyF/dzha7uYGzaA1+rAftE76aeGlZYnoO42CgkxuYsxYxCzTJF8swQIUcrqFkFhN
Z2th/K4MZwy4QW6xPrA=
-----END DSA PRIVATE KEY-----

2.1 gendsa指令说明

gendsa指令功能简单,即利用输入的密钥参数生成DSA密钥

xlzh@cmos:~/test$ openssl gendsa -
usage: gendsa [args] dsaparam-file
-out file - output the key to 'file'
-des - encrypt the generated key with DES in cbc mode
-des3 - encrypt the generated key with DES in ede cbc mode ( bit key)
-seed
encrypt PEM output with cbc seed
-aes128, -aes192, -aes256
encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
encrypt PEM output with cbc camellia
-engine e - use engine e, possibly a hardware device.
-rand file:file:...
- load the file (or the files in the directory) into
the random number generator
dsaparam-file
- a DSA parameter file as generated by the dsaparam command

示例如下:

1、根据密钥参数生成密钥

/*根据密钥参数生成密钥*/
xlzh@cmos:~/test$ openssl gendsa -out DSA1.pem DSAP.pem
Generating DSA key, bits
xlzh@cmos:~/test$ openssl gendsa -out DSA2.pem DSAP.pem
Generating DSA key, bits
/*相同密钥参数,每次生成的密钥不同*/
xlzh@cmos:~/test$ diff DSA1.pem DSA2.pem
,11c8,
< TWcw1+XFAoGAEA1DLnv5efzB+ipIQ29q0ZedLVPyxdB44jpZES+esBQtU04HdI2N
< bClgwj8c9M6Y/9rL1uy3NqKaGHM+mjLyAXVceigFx7v15r5LRmWjialdqkcVG/3S
< Qo530ui/tXgFbFV9iA6C8L+nHDMPOf5v6oGyICmxN8DWzhQAsmy9mkICFBeqMbZM
< 9qBeG0BaS/6PucBxObsv
---
> TWcw1+XFAoGALWkjJeFunfvkiarJ1/pw8Lqvuyu/Glt3g/hURPPlrOIhA0pFXDmC
> UzCM1x6wrHWFc0jmUNk6FtnjGyiCLxVJGzeB7/4MA35aInHkiHwzX7a+B0At8bMq
> WEkWtzxhvTxTqWTAcC02Qr2mNNfJwWWVV0jVzMtm3Gb6YwhNnUvxp0ACFHrXO/8h
> dIwr6pSuj6vdNpHFDlY2
/*生成密钥并使用des3加密存储*/
xlzh@cmos:~/test$ openssl gendsa -out DSA.pem -des3 -passout pass: DSAP.pem
Generating DSA key, bits

2.1 dsa指令说明

dsa和rsa指令功能及其类似,如下

xlzh@cmos:~/test$ openssl dsa -
unknown option -
dsa [options] <infile >outfile
where options are
-inform arg input format - DER or PEM
-outform arg output format - DER or PEM
-in arg input file
-passin arg input file pass phrase source
-out arg output file
-passout arg output file pass phrase source
-engine e use engine e, possibly a hardware device.
-des encrypt PEM output with cbc des
-des3 encrypt PEM output with ede cbc des using bit key
-aes128, -aes192, -aes256
encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
encrypt PEM output with cbc camellia
-seed encrypt PEM output with cbc seed
-text print the key in text
-noout don't print key out
-modulus print the DSA public value

示例如下:

1、加密密钥和解密密钥

/*生成未加密的DSA密钥*/
xlzh@cmos:~/test$ openssl dsaparam -out DSA.pem -genkey
/*使用des3加密DSA密钥*/
xlzh@cmos:~/test$ openssl dsa -in DSA.pem -out E_DSA.pem -des3 -passout pass:
read DSA key
writing DSA key
/*解密DSA密钥*/
xlzh@cmos:~/test$ openssl dsa -in E_DSA.pem -out DSA1.pem -passin pass:
read DSA key
writing DSA key

2、提取DSA的公钥

xlzh@cmos:~/test$ openssl dsa -in DSA.pem -out pub.pem -pubout
read DSA key
writing DSA key

3、小结

可以看到,DSA和RSA的指令非常相似,熟悉了其中一种,另外一种也很容易上手。而且openssl提供的指令虽多,但参数来来回回就那么多,在多数情况下不同指令的相同参数含义大概一样。

到此为止,介绍了对称加密算法指令,非对称加密算法RSA和DSA相关指令,这些都是一些基础指令,在实际应用中,我们使用openssl做的大多数是与CA有关的签名、验证、加密、解密等。所以接下来要写的是和实际应用相关的内容,比如证书自签名、二级证书签发、终端证书签发、证书验证等内容。

openssl 非对称加密算法DSA命令详解的更多相关文章

  1. openssl 非对称加密算法RSA命令详解

    1.非对称加密算法概述 非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下: 1.加密密钥和解密密钥不同 2.密钥对中的一个密钥可以公开 3.根据公开密钥很 ...

  2. openssl 对称加密算法enc命令详解

    1.对称加密算法概述 openssl的加密算法库提供了丰富的对称加密算法,我们可以通过openssl提供的对称加密算法指令的方式使用,也可以通过调用openssl提供的API的方式使用. openss ...

  3. ssh scp命令详解

    --查看版本 $ ssh -V OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003 --用SSH登录到远程主机 localhost$ ssh -l jsmith(用户名 ...

  4. RMAN命令详解和常用汇总

    RMAN命令详解和常用汇总转摘汇集,日后使用本文链接:https://blog.csdn.net/EVISWANG/article/details/50448370http://blog.itpub. ...

  5. AES 加密算法的原理详解

    AES 加密算法的原理详解 本教程摘选自 https://blog.csdn.net/qq_28205153/article/details/55798628 的原理部分. AES简介 高级加密标准( ...

  6. Git的使用以及常用命令(详解)

    一. 版本控制工具 什么是版本控制系统? 版本控制系统(Version Control System):是一种记录一个或若干文件内容变化,以便将来查阅特定版 本修订情况的系统.版本控制系统不仅可以应用 ...

  7. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  8. linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  9. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

随机推荐

  1. mybati之入门demo

    //书写我的第一个mybaits程序,主要讲的是mybatis-config.xml的文件 需求:根据用户名查询用户信息: 1.  通过session调用selectOnt(statme," ...

  2. Js 插件修改及优化总结

    1. ajaxfileupload 上传插件版本问题以及数据处理问题 参考链接: http://liwx2000.iteye.com/blog/1540321 现在大家至少也在用jquery1.9以上 ...

  3. C3P0连接池配置方式

    c3p0的配置方式分为三种,分别是 1.setters一个个地设置各个配置项 2.类路径下提供一个c3p0.properties文件 3.类路径下提供一个c3p0-config.xml文件 1.set ...

  4. Asp.Net--主题/皮肤文件

    主题 是皮肤的集合.皮肤描述了控件应该如何显示,它可以定义样式的属性,图片,颜色等. 如果拥有多个主题,用户可以根据需要选择主题来显示站点,这只需要通过点击按钮,从一个皮肤切换到另一个皮肤. 皮肤文件 ...

  5. zookeeper初体验之关于解决quartz重复执行任务的一种思路

    前阵子工作中遇到了一个很麻烦的问题.本人所在的项目组做了一个机遇quartz集群的任务系统.通俗点讲就是用quartz框架(quartz是一款能跑定时任务的框架支持复杂的时间表达式)来执行定时任务.但 ...

  6. uva 11536 - Smallest Sub-Array

    题目大意:按照题目中的要求构造出一个序列,找出最短的子序列,包含1~k. 解题思路:先根据题目的方法构造出序列,然后用Towpointer的方法,用v[i]来记录当前[l, r]中有几个i:当r移动时 ...

  7. jQuery插件实现select下拉框左右选择_交换内容(multiselect2side)

    效果图: 使用jQuery插件---multiselect2side做法: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...

  8. 青蛙的约会(POJ 1061 同余方程)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 103802   Accepted: 20198 Descript ...

  9. HTML5面试题-备

    万不可投机取巧.只求当时过关,非长久之计也!(感谢大神分享) 面试有几点需要注意: 面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑.深度↑.方向↑. 题目类型: 技术视野.项目细节.理论知 ...

  10. TEncoding & TNetEncoding(使用现成的TBase64Encoding,TEncoding和TMBCSEncoding)

    TEncoding and TNetEncoding are abstract classes and you will never instantiate one of them, because ...