国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JAVA加密算法(5)- 數字簽名算法(RSA、DSA)

RichardXG / 2163人閱讀

摘要:數字簽名流程生成簽名對源文件的數字摘要,使用私鑰加密,生成加密數字摘要驗證簽名對加密數字摘要通過公鑰進行解密,生成數字摘要,比較數字摘要與數字摘要,結果相同則簽名驗證通過。

數字簽名流程

(1)生成簽名:對源文件的「數字摘要」,使用私鑰加密,生成「加密數字摘要」;

(2)驗證簽名:對「加密數字摘要」通過公鑰進行解密,生成「數字摘要2」,比較「數字摘要」與「數字摘要2」,結果相同則簽名驗證通過。

概念:帶有「公鑰」和「私鑰」的「消息摘要」算法,是「非對稱加密算法」和「消息摘要」算法的結合體

私鑰簽名,公鑰驗證

常用簽名算法

RSASignature

DSASignature

ECDSASignature(需Bouncy Castle)

數字簽名作用

驗證數據完整性

認證數據來源

抗否認

場景

如Android App開發者簽名

RSASignature示例
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

public class RSASignatureUtil {

    public static final String KEY_ALGORITHM = "RSA";//密鑰算法
    public static final String SIGN_ALGORITHM = "MD5withRSA";//簽名算法:MD2withRSA,SHA1WithRSA,SHA256withRSA,SHA384withRSA,SHA512withRSA

    /**
     * 初始化RSA公鑰私鑰
     */
    public static KeyPair initKey() throws Exception{
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);
        keyPairGenerator.initialize(1024);
        return keyPairGenerator.generateKeyPair();
    }

    /**
     * 簽名(原數據,私鑰 2要素)
     */
    public static byte[] sign(byte[] data, PrivateKey privateKey) throws Exception{
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKey.getEncoded());
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        PrivateKey priKey = keyFactory.generatePrivate(keySpec);

        Signature signature = Signature.getInstance(SIGN_ALGORITHM);
        signature.initSign(priKey);
        signature.update(data);//設置要計算的數據
        return signature.sign();
    }

    /**
     * 校驗簽名(元數據,公鑰,簽名 三要素)
     */
    public static boolean valid(byte[] data, byte[] publicKey, byte[] sign) throws Exception{
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKey);
        PublicKey pubKey = keyFactory.generatePublic(keySpec);

        Signature signature = Signature.getInstance(SIGN_ALGORITHM);
        signature.initVerify(pubKey);
        signature.update(data);
        return signature.verify(sign);
    }

    public static void main(String[] args) throws Exception {
        String data = "123456";
        KeyPair keyPair = initKey();
        byte[] sign = sign(data.getBytes(),keyPair.getPrivate());
        boolean isValid = valid(data.getBytes(),keyPair.getPublic().getEncoded(),sign);
        System.out.println(isValid);
    }

}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65220.html

相關文章

  • 慕課網_《Java實現數字簽名》學習總結

    時間:2017年4月13日星期四說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 數字簽名算法概述 數字簽名算法 簽名-安全性,抗否認性 數字簽名:帶有密鑰(公鑰、私鑰)的消息摘要算法 驗...

    gotham 評論0 收藏0
  • 2021年,用更現代的方法使用PGP(中)

    摘要:世界上有兩種密碼一種是防止你的小妹妹偷看你的文件另一種是防止當局閱讀你的文件應用密碼學上篇鏈接年,用更現代的方法使用上三安全使用和備份準備為了安全性,建議在一臺斷網的或者系統上生成你的密鑰對。世界上有兩種密碼:一種是防止你的小妹妹偷看你的文件;另一種是防止當局閱讀你的文件.? ...

    Tecode 評論0 收藏0
  • 加密解密算法介紹

    摘要:加密解密算法介紹算法目前常見有加密算法,散列算法,編碼算法,使用位關鍵字作為流加密算法加密技術通常分為兩大類對稱式和非對稱式。對稱性加密算法有用途對稱加密算法用來對敏感數據等信息進行加密數據加密標準,速度較快,適用于加密大量數據的場合。 加密解密算法介紹 算法目前常見有: 加密算法,散列算法,Base64(編碼算法),https(SSL使用40位關鍵字作為RC4流加密算法) 加密技術通...

    ThinkSNS 評論0 收藏0
  • JAVA加密算法(1)- 密碼學概述及BASE64算法使用

    密碼學綜述 密碼學基本功能 機密性、鑒別、報文完整性、不可否認性 基本模型 sender-->加密算法 --> 密文 --> 解密算法 --> receiver 密鑰源 密碼學算法分類: 消息編碼:Base64 消息摘要:MD類,SHA類,MAC 對稱加密:DES,3DES,AES 非對稱加密:RSA,DH密鑰交換 數字簽名:RSA signature,DSA signature 密碼學...

    sevi_stuo 評論0 收藏0
  • 使用Hutool處理RSA等非對稱加密

    摘要:此文主要介紹利用簡化非對稱加密解密。對于非對稱加密,最常用的就是和,在中使用對象來負責加密解密。用于向公鑰所有者發布信息這個信息可能被他人篡改但是無法被他人獲得。 介紹 Hutool工具是一個國產開源Java工具集,旨在簡化Java開發中繁瑣的過程,Hutool-crypto模塊便是針對JDK加密解密做了大大簡化。 此文主要介紹利用Hutool-crypto簡化非對稱加密解密。 對于非...

    bang590 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<