频道栏目
首页 > 程序开发 > 移动开发 > 其他 > 正文
数字签名算法_DSA
2017-03-17 10:07:59         来源:Tom91的博客  
收藏   我要投稿

DSS:数字签名标准

DSA:数字签名算法

DSA和RSA区别:

DSA:仅包含数字签名 RSA:既包含数字签名也包含数字加密

DSA签名和RSA签名Java jdk提供的实现代码基本一样,BC提供的没学学习过不知道啥情况。

直接上代码吧:

public class DemoDsa {

public static void jdkDSA(String data) {

// 初始化密钥

try {

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");

keyPairGenerator.initialize(512);

KeyPair keyPair = keyPairGenerator.generateKeyPair();

//0. 获取公钥和密钥

DSAPublicKey dsaPublicKey = (DSAPublicKey) keyPair.getPublic();

DSAPrivateKey dsaPrivateKey = (DSAPrivateKey) keyPair.getPrivate();

//1.执行签名

PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(dsaPrivateKey.getEncoded());

KeyFactory keyFactory = KeyFactory.getInstance("DSA");

PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);

Signature signature = Signature.getInstance("SHAwithDSA");

signature.initSign(privateKey);

signature.update(data.getBytes());

//加密后的结果

byte[] result = signature.sign();

//打印数据

StringBuilder hexString = new StringBuilder();

for (int i = 0; i < result.length; i++) {

if ((result[i] & 0xff) < 0x10)

hexString.append("0");

hexString.append(Integer.toHexString(0xFF & result[i]));

}

System.out.println("加密后的数据:" + hexString.toString().toLowerCase());

//3.验证签名

X509EncodedKeySpec x509EncodedKeySpec=new X509EncodedKeySpec(dsaPublicKey.getEncoded());

keyFactory=KeyFactory.getInstance("DSA");

PublicKey publicKey=keyFactory.generatePublic(x509EncodedKeySpec);

signature=Signature.getInstance("SHAwithDSA");

signature.initVerify(publicKey);

signature.update(data.getBytes());

//验证后的结果

boolean isOk=signature.verify(result);

System.out.println("验证结果:"+isOk);

} catch (Exception e) {

e.printStackTrace();

}

}

}

调用这个签名:

jdkDSA("i love you");

 

点击复制链接 与好友分享!回本站首页
上一篇:NSURLSession 同步请求(使用信号量)
下一篇:从NestedScrollView解读NestedScroll
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站