数字签名算法_DSA

DSS:数字签名标准

DSA:数字签名算法

DSA和RSA区别:

  1. DSA:仅包含数字签名
  2. 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");
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值