數字簽名算法_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");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章