疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

用JAVA做数字签名之一


 

数字签名常被用来校验软件及软件制造者,以保证软件代码没有被任何方式玷污。
 
---- 或者通俗地讲,使用数字签名可以确保软件的“清洁”和“正宗”,即软件从其制造者或出版商处直到最终用户手中这段时间里未被他人篡改过。
 
---- 本文在对数字签名的有关概念进行简单回顾后,给出了用JAVA来创建和使用数字签名的具体方法。
 
一、数字签名及其功能
---- 数字签名算法(DSA是“公共密钥加密算法”中的一种,因此让我们从“私有密钥/公共密钥”开始进行简单回顾。
 
---- 1. 私有密钥加密及其局限性
 
---- 私有密钥加密系统使用唯一的密钥(即私有密钥)进行加密和解密。该密钥必须为发送者和接收者所共享。即,若甲要向乙发一个加密邮件,甲需用一密钥将信息加密;乙收到邮件后,须用同样的密钥将信息解密。
 
---- 该方法显然有非常严重的缺点。例如,接收双方必须拥有同样的密钥,这要求一定要有一种安全的协议来保证密钥传送的可靠;第二,有紧急的加密消息需要发送时,可能因接收方没有密钥而不能完成传送;第三,若要将消息发给许多不同的团体,就需要与各个团体对应,维护许多不同的密钥。
 
---- 为克服私有密钥加密系统的这些弱点,人们引进了公共密钥加密系统。
 
---- 2. 公共密钥加密
 
---- 公共密钥加密不需要一条信息的发送者和接收者知道对方的密钥,就能访问该加密信息。
 
---- 公共密钥加密系统使用密钥对(公共密钥和私有密钥)来加密和解密信息。其加密思想也非常简单:用公共密钥加密的信息只能用与之对应的私有密钥解开;而用私有密钥加密的信息,任何拥有与之对应的公共密钥的人均可解开。因此,私有密钥总为个人保管而无须外传,公共密钥则可授权给他人使用而不会破坏安全性,公共密钥和私有密钥之间永远存在着一对一的关系。具体地讲即:
 
---- 第一,若信息是用接收方的公共密钥加密的,则只有应该收到此消息的人才能对之解密(即只有拥有与该公共密钥对应的私有密钥的人才可解密)。例如,甲要向乙发一个加密邮件,甲必须用乙的公共密钥加密信息后再传给乙。
 
---- 第二,若信息是用发送方的私有密钥加密的,则任何拥有发送方公共密钥的接收者都可以对信息进行解密,从而确定该信息确实是来自该发送者,并且信息内容未遭到任何无意或恶意的破坏。
 
---- 上述第二点正是数字签名的含义。

(转载)