首页 » 信息技术 »

用openssl生成并验证数字签名

2019年5月31日 / 76次阅读
加密解密

数字签名,就是加密之后的信息摘要,基本流程是这样的:

A对待发送的文本进行摘要计算,然后用自己的私钥对摘要进行加密(得到的就是签名),加密后发给B;

B收到信息后,同样对这段文本进行相同的摘要计算,然后用A的公钥对签名进行解密,得到A发送前计算的摘要,然后对比这两个摘要是否一致。

如果一致,表示这段信息是A发出的,并且没有被修改过。

我们可以使用openssl这个工具来生成签名,也可以用它来验证签名。

先生成一个私钥:

xinlin@ubuntuserver:~/acme-tiny$ openssl genrsa -out private.key 4096
Generating RSA private key, 4096 bit long modulus
...................................................................................++
.........++
e is 65537 (0x010001)

生成一个文件,然后对这个文件进行签名:

xinlin@ubuntuserver:~/acme-tiny$ openssl dgst -md5 -hex -sign private.key t.txt
RSA-MD5(t.txt)= 9eccef71abeafcb865dfb0a0ac789a1870a748c9998ddab4ca8b2783ec7a093aefbd7d2b462d35b331d1e3cbe63c5bca7ab3ffd11f11f9b07a4b8cff7946b97298b758e8a27e4049b3a8287566ca11af7862f22e1ce4e5156efca76202bd61163a60eef41af0de5b761908d7d70d341cc5631764fcdb21208771f47c5a14679e7ab6af4ec609d9793159763c5cdead9258f118b538a992519b5a7f40b36a9d2b4437135054f925458998847ea59707d0ef8ee9d8efba87f7e39d8939a135785dd2334b25d3ba133b3f5fd31e87da11d009ed74fe4d94a23288508bb5adb1b4c5a0ccc8c73ecc156f079e915a0987d5fa2f36c38b6516ebef4d646f920db5ff9acb6785c1786d4759463425450d5f040f3014dcf6932a3ad5bd26f6a4bb15ef02850c9ee4125bca3895b2507f57ad1ea052d2bcaaefb91aab5b8cca60d0f901094ac6c6f19b1967587ebcfff35ae1fd5bd7e43b214b54f35c3b553f06021913ad29a7004e1f208ae7f73b4c7fdae19990db0af64cf8e0ccc42e774a9f0eb05d11e4e138ef60a7dc7d452fb4e19b1115308a50d23741cb7382bd7589ec7a94f09000de7c26ce786f51867b701d594ab4dcf503494fe420e46d2f2905bb8001e22e657d260a9d723c5d468b27d9fe14e161f33c3b36a7d3204f92803c65fb8736ef64dbe3b0bf23ddac9784e43ad53155fc81745d5a5e869975b41d92119b9918c1

以上命令的含义,就是使用md5算法计算摘要,然后使用私钥private.key对摘要进行加密,-hex表示用十六进制的方式输出。如果不适用-hex,会看到一篇乱码。

我们也可以把签名输出到一个文件,这个时候就不能使用-hex参数,否则验证签名会失败:

xinlin@ubuntuserver:~/acme-tiny$ openssl dgst -md5 -out t.sign -sign private.key t.txt

t.sign就是t.txt文件的签名。

验证签名,我们要使用私钥对应的公钥,先获取公钥:

xinlin@ubuntuserver:~/acme-tiny$ openssl rsa -in private.key -pubout -out public.key
writing RSA key

使用公钥来验证签名:

xinlin@ubuntuserver:~/acme-tiny$ openssl dgst -md5 -verify public.key -signature t.sign t.txt
Verified OK

验证时成功的。

理论上也可以用私钥来验证签名,只是实际上不会使用,也许发送方可能会通过私钥验证来证明计算的正确:

xinlin@ubuntuserver:~/acme-tiny$ openssl dgst -md5 -prverify private.key -signature t.sign t.txt
Verified OK

只是命令格式稍有不同。

以上就是对使用openssl生成并且验证数字签名的知识介绍。

本文链接:https://www.maixj.net/ict/openssl-dgst-21560

留言区


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top