数字签名介绍和java的实现
?
现实中的文件和书信我们可以通过印章来确定它的有效和可信性,那么在计算机网络中传送的报文如何保证呢?这就是数字签名要解决的问题。
数字签名必须能保证以下3点
1.接收者能够核实发送者对报文的签名。
2.发送者事后不能抵赖对报文的签名。
3.接收者不能伪造对报文的签名。
?
目前已经存在着各种各样数字签名方法。今天为大家介绍一种java中比较容易实现的公开密钥算法来做数字签名。首先介绍一下公开密钥算法实现数字签名的原理:
?
public boolean validData (byte[] data,String publicKey,String signature) {try { // valid the file with public key and signaturebyte[] encodedpubKey = StringUtil.decodeHex(publicKey);X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encodedpubKey);KeyFactory keyFactory;keyFactory = KeyFactory.getInstance("DSA");PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);byte[] sign = StringUtil.decodeHex(signature);Signature s = Signature.getInstance("DSA");s.initVerify(pubKey);s.update(data);boolean flag = s.verify(sign);return flag;} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (InvalidKeySpecException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (SignatureException e) {e.printStackTrace();}return false;}?
?
?
1 楼 ivyloo 2009-06-03 有帮助,谢谢!