日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DSA算法实现数字签名--java实现

發布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DSA算法实现数字签名--java实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

DSA是Schnorr和ElGamal簽名算法的變種,被美國NIST作為DSfS(DigitalSignature Standard)。

DSA是基于整數有限域離散對數難題的,其安全性與RSA相比差不多。DSA的一個重要特點是兩個素數公開,這樣,當使用別人的p和q時,即使不知道私鑰,你也能確認它們是否是隨機產生的,還是作了手腳。RSA卻做不到。


算法分類信息:

算法密鑰長度默認長度簽名長度實現的方
SHA1withDSA512-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实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。