摘要:數(shù)字簽名流程生成簽名對(duì)源文件的數(shù)字摘要,使用私鑰加密,生成加密數(shù)字摘要驗(yàn)證簽名對(duì)加密數(shù)字摘要通過公鑰進(jìn)行解密,生成數(shù)字摘要,比較數(shù)字摘要與數(shù)字摘要,結(jié)果相同則簽名驗(yàn)證通過。
數(shù)字簽名流程
(1)生成簽名:對(duì)源文件的「數(shù)字摘要」,使用私鑰加密,生成「加密數(shù)字摘要」;
(2)驗(yàn)證簽名:對(duì)「加密數(shù)字摘要」通過公鑰進(jìn)行解密,生成「數(shù)字摘要2」,比較「數(shù)字摘要」與「數(shù)字摘要2」,結(jié)果相同則簽名驗(yàn)證通過。
概念:帶有「公鑰」和「私鑰」的「消息摘要」算法,是「非對(duì)稱加密算法」和「消息摘要」算法的結(jié)合體
常用簽名算法私鑰簽名,公鑰驗(yàn)證
RSASignature
DSASignature
ECDSASignature(需Bouncy Castle)
數(shù)字簽名作用驗(yàn)證數(shù)據(jù)完整性
認(rèn)證數(shù)據(jù)來源
抗否認(rèn)
場(chǎng)景如Android App開發(fā)者簽名
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(); } /** * 簽名(原數(shù)據(jù),私鑰 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);//設(shè)置要計(jì)算的數(shù)據(jù) return signature.sign(); } /** * 校驗(yàn)簽名(元數(shù)據(jù),公鑰,簽名 三要素) */ 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); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/65220.html
時(shí)間:2017年4月13日星期四說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:概述 1-1 數(shù)字簽名算法概述 數(shù)字簽名算法 簽名-安全性,抗否認(rèn)性 數(shù)字簽名:帶有密鑰(公鑰、私鑰)的消息摘要算法 驗(yàn)...
摘要:世界上有兩種密碼一種是防止你的小妹妹偷看你的文件另一種是防止當(dāng)局閱讀你的文件應(yīng)用密碼學(xué)上篇鏈接年,用更現(xiàn)代的方法使用上三安全使用和備份準(zhǔn)備為了安全性,建議在一臺(tái)斷網(wǎng)的或者系統(tǒng)上生成你的密鑰對(duì)。世界上有兩種密碼:一種是防止你的小妹妹偷看你的文件;另一種是防止當(dāng)局閱讀你的文件.? ...
摘要:加密解密算法介紹算法目前常見有加密算法,散列算法,編碼算法,使用位關(guān)鍵字作為流加密算法加密技術(shù)通常分為兩大類對(duì)稱式和非對(duì)稱式。對(duì)稱性加密算法有用途對(duì)稱加密算法用來對(duì)敏感數(shù)據(jù)等信息進(jìn)行加密數(shù)據(jù)加密標(biāo)準(zhǔn),速度較快,適用于加密大量數(shù)據(jù)的場(chǎng)合。 加密解密算法介紹 算法目前常見有: 加密算法,散列算法,Base64(編碼算法),https(SSL使用40位關(guān)鍵字作為RC4流加密算法) 加密技術(shù)通...
密碼學(xué)綜述 密碼學(xué)基本功能 機(jī)密性、鑒別、報(bào)文完整性、不可否認(rèn)性 基本模型 sender-->加密算法 --> 密文 --> 解密算法 --> receiver 密鑰源 密碼學(xué)算法分類: 消息編碼:Base64 消息摘要:MD類,SHA類,MAC 對(duì)稱加密:DES,3DES,AES 非對(duì)稱加密:RSA,DH密鑰交換 數(shù)字簽名:RSA signature,DSA signature 密碼學(xué)...
摘要:此文主要介紹利用簡(jiǎn)化非對(duì)稱加密解密。對(duì)于非對(duì)稱加密,最常用的就是和,在中使用對(duì)象來負(fù)責(zé)加密解密。用于向公鑰所有者發(fā)布信息這個(gè)信息可能被他人篡改但是無法被他人獲得。 介紹 Hutool工具是一個(gè)國(guó)產(chǎn)開源Java工具集,旨在簡(jiǎn)化Java開發(fā)中繁瑣的過程,Hutool-crypto模塊便是針對(duì)JDK加密解密做了大大簡(jiǎn)化。 此文主要介紹利用Hutool-crypto簡(jiǎn)化非對(duì)稱加密解密。 對(duì)于非...
閱讀 866·2021-11-25 09:44
閱讀 1081·2021-11-19 09:40
閱讀 7106·2021-09-07 10:23
閱讀 1986·2019-08-28 17:51
閱讀 1113·2019-08-26 10:59
閱讀 1935·2019-08-26 10:25
閱讀 3142·2019-08-23 18:22
閱讀 871·2019-08-23 16:58