DSA算法实现数字签名--java实现
生活随笔
收集整理的這篇文章主要介紹了
DSA算法实现数字签名--java实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
DSA是Schnorr和ElGamal簽名算法的變種,被美國NIST作為DSfS(DigitalSignature Standard)。
DSA是基于整數有限域離散對數難題的,其安全性與RSA相比差不多。DSA的一個重要特點是兩個素數公開,這樣,當使用別人的p和q時,即使不知道私鑰,你也能確認它們是否是隨機產生的,還是作了手腳。RSA卻做不到。
算法分類信息:
| 算法 | 密鑰長度 | 默認長度 | 簽名長度 | 實現的方 |
| SHA1withDSA | 512-65536 (64的整數倍) | 1024 | 同密鑰 | JDK |
| SHA224withDSA | 同上 | 1024 | 同密鑰 | BC |
| SHA256withDSA | ... | 1024 | 同密鑰 | BC |
| SHA384withDSA | ... | 1024 | 同密鑰 | BC |
| SHA512withDSA | ... | 1024 | 同密鑰 | BC |
java實現:
package com.zoo.lion.security;import org.apache.commons.codec.binary.Hex;import java.security.*; import java.security.interfaces.DSAPrivateKey; import java.security.interfaces.DSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec;/*** @Author: xf* @Date: 2019/6/5 10:05* @Version 1.0*/ public class DSA {private static String src = "dsa security";public static void main(String[] args) throws Exception {jdkDSA();}public static void jdkDSA() throws Exception {//1.初始化密鑰KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");keyPairGenerator.initialize(512);KeyPair keyPair = keyPairGenerator.generateKeyPair();DSAPublicKey dsaPublicKey = (DSAPublicKey) keyPair.getPublic();DSAPrivateKey dsaPrivateKey = (DSAPrivateKey) keyPair.getPrivate();//2.執行簽名PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(dsaPrivateKey.getEncoded());KeyFactory keyFactory = KeyFactory.getInstance("DSA");PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);Signature signature = Signature.getInstance("SHA1withDSA");signature.initSign(privateKey);signature.update(src.getBytes());byte[] res = signature.sign();System.out.println("簽名:" + Hex.encodeHexString(res));//3.驗證簽名X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(dsaPublicKey.getEncoded());keyFactory = KeyFactory.getInstance("DSA");PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);signature = Signature.getInstance("SHA1withDSA");signature.initVerify(publicKey);signature.update(src.getBytes());boolean bool = signature.verify(res);System.out.println("驗證:" + bool);} }?
總結
以上是生活随笔為你收集整理的DSA算法实现数字签名--java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 认识Makefile文件(什么作用,格式
- 下一篇: 基于Pytorch全连接神经网络实现多分