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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

DSA签名算法 - Java加密与安全

發布時間:2024/4/13 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DSA签名算法 - Java加密与安全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DSA簽名算法DSA就是Digital Signature Algorithm,他使用的是EIGamal數字簽名算法DSA只能配合SHA使用:1. 所以有SHA1withDSA2. SHA256withDSA3. SHA512withDSA和RSA數字簽名相比,DSA的簽名算法更快 package com.learn.securl;import java.security.GeneralSecurityException; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64;/*** 用DSA簽名的時候和RSA是完全一樣的* 可以看到使用DSA和RSA簽名是非常類似的* 用公鑰簽名的結果為true* 修改原始簽名的結果為false* @author Leon.Sun**/ public class SecDSASignature {PrivateKey sk;PublicKey pk;/*** 生成公鑰/私鑰對* @throws GeneralSecurityException*/public SecDSASignature() throws GeneralSecurityException{/*** 只是算法名稱從RSA變成了DSA*/KeyPairGenerator kpGen = KeyPairGenerator.getInstance("DSA");kpGen.initialize(1024);KeyPair kp = kpGen.generateKeyPair();this.sk = kp.getPrivate();this.pk = kp.getPublic();}/*** 從以保存的字節中(例如:讀取文件)恢復公鑰/私鑰* @param pk* @param sk* @throws GeneralSecurityException*/public SecDSASignature(byte[] pk, byte[] sk) throws GeneralSecurityException{KeyFactory kf = KeyFactory.getInstance("DSA");X509EncodedKeySpec pkSpec = new X509EncodedKeySpec(pk);this.pk = kf.generatePublic(pkSpec);PKCS8EncodedKeySpec skSpec = new PKCS8EncodedKeySpec(sk);this.sk = kf.generatePrivate(skSpec);}/*** 把私鑰導出為字節* @return*/public byte[] getProvateKey(){return this.sk.getEncoded();}/*** 把公鑰導出為字節* @return*/public byte[] getPublicKey(){return this.pk.getEncoded();}/*** sign by sk* @param message* @return* @throws GeneralSecurityException*/public byte[] sign(byte[] message) throws GeneralSecurityException{Signature signature = Signature.getInstance("SHA1withDSA");signature.initSign(this.sk);signature.update(message);return signature.sign();}/*** sign by pk* @param message* @param sign* @return* @throws GeneralSecurityException*/public boolean verify(byte[] message, byte[] sign) throws GeneralSecurityException{Signature signature = Signature.getInstance("SHA1withDSA");signature.initVerify(this.pk);signature.update(message);return signature.verify(sign);}public static void main(String[] args) throws Exception{byte[] message = "Hello, 使用SHA1withDSA算法進行數字簽名!".getBytes();SecDSASignature rsas = new SecDSASignature();byte[] sign = rsas.sign(message);System.out.println("sign: " + Base64.getEncoder().encodeToString(sign));boolean verified = rsas.verify(message, sign);System.out.println("verify: " + verified);// 用另一個公鑰驗證:boolean verified2 = new SecDSASignature().verify(message, sign);System.out.println("verify with another public key: " + verified2);// 修改原始信息:message[0] = 100;boolean verified3 = rsas.verify(message, sign);System.out.println("verify changed message: " + verified3);} } 最后我們總結一下:1. DSA是另一種數字簽名算法2. 還有另一種數字簽名算法,例如ECDSA:Elliptic Curve Digital Signature Algorithm(Bouncy Castle)

?

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的DSA签名算法 - Java加密与安全的全部內容,希望文章能夠幫你解決所遇到的問題。

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