摘要:數字簽名流程生成簽名對源文件的數字摘要,使用私鑰加密,生成加密數字摘要驗證簽名對加密數字摘要通過公鑰進行解密,生成數字摘要,比較數字摘要與數字摘要,結果相同則簽名驗證通過。
數字簽名流程
(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
時間:2017年4月13日星期四說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 數字簽名算法概述 數字簽名算法 簽名-安全性,抗否認性 數字簽名:帶有密鑰(公鑰、私鑰)的消息摘要算法 驗...
摘要:世界上有兩種密碼一種是防止你的小妹妹偷看你的文件另一種是防止當局閱讀你的文件應用密碼學上篇鏈接年,用更現代的方法使用上三安全使用和備份準備為了安全性,建議在一臺斷網的或者系統上生成你的密鑰對。世界上有兩種密碼:一種是防止你的小妹妹偷看你的文件;另一種是防止當局閱讀你的文件.? ...
密碼學綜述 密碼學基本功能 機密性、鑒別、報文完整性、不可否認性 基本模型 sender-->加密算法 --> 密文 --> 解密算法 --> receiver 密鑰源 密碼學算法分類: 消息編碼:Base64 消息摘要:MD類,SHA類,MAC 對稱加密:DES,3DES,AES 非對稱加密:RSA,DH密鑰交換 數字簽名:RSA signature,DSA signature 密碼學...
摘要:此文主要介紹利用簡化非對稱加密解密。對于非對稱加密,最常用的就是和,在中使用對象來負責加密解密。用于向公鑰所有者發布信息這個信息可能被他人篡改但是無法被他人獲得。 介紹 Hutool工具是一個國產開源Java工具集,旨在簡化Java開發中繁瑣的過程,Hutool-crypto模塊便是針對JDK加密解密做了大大簡化。 此文主要介紹利用Hutool-crypto簡化非對稱加密解密。 對于非...
閱讀 860·2021-11-25 09:44
閱讀 1065·2021-11-19 09:40
閱讀 7063·2021-09-07 10:23
閱讀 1975·2019-08-28 17:51
閱讀 1106·2019-08-26 10:59
閱讀 1928·2019-08-26 10:25
閱讀 3131·2019-08-23 18:22
閱讀 865·2019-08-23 16:58