趣文网 > 作文大全

数字签名的原理是什么?这篇文章给你答案(java代码实现)

2020-11-21 22:05:01
相关推荐

数字签名在数据的交互中一直都占据着很重要的地位,因此,这篇文章对其原理进行整理总结一下。最后再给出代码的实现。

一、简单认识

相信我们都写过信,在写信的时候落款处总是要留下自己的名字,用来表示写信的人是谁。我们签的这个字就是生活中的签名:

而数字签名呢?其实也是同样的道理,他的含义是:在网络中传输数据时候,给数据添加一个数字签名,表示是谁发的数据,而且还能证明数据没有被篡改。

OK,数字签名的主要作用就是保证了数据的有效性(验证是谁发的)和完整性(证明信息没有被篡改)。下面我们就来好好地看一下他的底层实现原理是什么样子的。

二、基本原理

为了理解得清楚,我们通过案例一步一步来讲解。话说张三有俩好哥们A、B。由于工作原因,张三和AB写邮件的时候为了安全都需要加密。于是张三想到了数字签名:

整个思路是这个样子的:

第一步:加密采用非对称加密,张三有三把钥匙,两把公钥,送给朋友。一把私钥留给自己。第二步:A或者B写邮件给张三:A先用公钥对邮件加密,然后张三收到邮件之后使用私钥解密。第三步:张三写邮件给A或者B:(1)张三写完邮件,先用hash函数生成邮件的摘要,附着在文章上面,这就完成了数字签名,然后张三再使用私钥加密。就可以把邮件发出去了。(2)A或者是B收到邮件之后,先把数字签名取下来,然后使用自己的公钥解密即可。这时候取下来的数字签名中的摘要若和张三的一致,那就认为是张三发来的,珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

上面的流程我们使用一张图来演示一下:

首先把公钥送给朋友A和B:

然后呢,就是朋友A或者B给张三发邮件:

还有就是最后一个比较麻烦的,张三给A或者B发邮件:

OK,上面的这几张图想必你应该能够理解清楚了,其实还有一些很复杂的情况,因为上面的数字签名是在理想状态下完成的,但是如果遇到了公钥错误,摘要不正确该如何处理呢?这里就涉及到数字证书了,我们来分析一下。

三、数字证书

上面提到我们对签名进行验证时,需要用到公钥。如果公钥是伪造的,那我们无法验证数字签名了,也就根本不可能从数字签名确定对方的合法性了。这时候证书就闪亮登场了。我们可能都有考各种证书的经历,比如说普通话证书,四六级证书等等,但是归根结底,到任何场合我们都能拿出我们的证书来证明自己确实已经考过了普通话,考过了四六级。这里的证书也是同样的道理。

如果不理解证书的作用,我们可以举一个例子,比如说我们的毕业证书,任何公司都会承认。为什么会承认?因为那是国家发得,大家都信任国家。也就是说只要是国家的认证机构,我们都信任它是合法的。

那么这个证书是如何生成的呢?我们再来看一张图:

此时即使张三的朋友A把公钥弄错了,张三也可以通过这个证书验证。

四、代码验证

常用的数字签名算法有:RSA、DSA、ECDSA。这里的代码参考了慕课网。下面给出三种方式的代码实现:

1、RSA

2、DSA

3、ECDSA

代码已经在这里了,可以自己去实现一遍即可。

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

关于艾滋病的作文 大学生作文竞赛 欢聚作文 遗憾的事情作文 义卖作文开头 作文绿萝 春天的作文三年级 我的愿望作文画家 生活就是如此作文 我的爷爷600字作文 衬托作文 去烈士陵园的作文 落叶的作文400字 因为心中有爱作文 遗憾为题的作文 张继科作文 让我欢喜让我忧的作文 西红柿炒鸡蛋作文500字 我喜欢的一种食物作文 我最喜欢作文 互相关心互相帮助的作文 改变自己作文600 夏天作文 我的忧愁作文 我帮助了别人作文 英语作文主题 卖书活动作文 储蓄罐作文 440字作文 跳舞跳的不好被打屁股作文