-
使用KeyPair、KeyFactory都可以產(chǎn)生密鑰對(duì). DH: 由甲方公鑰產(chǎn)生乙方密鑰對(duì)時(shí)候,需要使用X509EncodedKeySpec進(jìn)行密鑰轉(zhuǎn)換. 在構(gòu)造本地密鑰過程中,需要使用X509EncodedKeySpec分別對(duì)公鑰與密鑰進(jìn)行轉(zhuǎn)換. RSA: 在加密、解密之前都需要使用X509EncodedKeySpec進(jìn)行密鑰轉(zhuǎn)換.查看全部
-
RSA算法是第一個(gè)能同時(shí)用于加密和數(shù)字簽名的算法 目前還沒有被破解,是使用最多的非對(duì)稱加密算法. RSA算法支持公鑰加密、私鑰解密.私鑰加密、公鑰解密. 有些算法只規(guī)定了公鑰加密、私鑰解密. RSA密鑰長(zhǎng)度:512~65536(64整數(shù)倍). JDK實(shí)現(xiàn)RSA算法的密鑰默認(rèn)長(zhǎng)度為1024,BC則是2048.查看全部
-
//根據(jù)一方公鑰生成另一方密鑰對(duì) public static Map<String,Object> generateKey(byte[] key){ //解析甲方的公鑰、轉(zhuǎn)換公鑰的材料 X509EncodedKeySpec x509KeySpec=new X509EncodedKeySpec(key); //實(shí)例化密鑰工廠 KeyFactory keyFactory=KeyFactory.getInstance("DH"); //產(chǎn)生轉(zhuǎn)換后的公鑰,該公鑰是甲方的 PublicKey pubKey=keyFactory.generatePublic(x509KeySpec); //由甲方的公鑰構(gòu)造乙方密鑰 DHParameterSpec dhParamSpec=((DHPublicKey)pubKey).getParams(); //實(shí)例化密鑰生成器 KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance(keyFactory.getAlgorithm()); //初始化密鑰生成器 keyPairGenerator.initialize(dhParamSpec); //產(chǎn)生密鑰對(duì) KeyPair keyPair=keyPairGenerator.genKeyPair(); //乙方公鑰 DHPublicKey publicKey=(DHPublicKey)keyPair.getPublic(); //乙方私鑰 DHPrivateKey privateKey=(DHPrivateKey)keyPair.getPrivate(); //將密鑰存儲(chǔ)在Map中 Map<String,Object> keyMap=new HashMap<String,Object>(); keyMap.put(PUBLIC_KEY, publicKey); keyMap.put(PRIVATE_KEY, privateKey); return keyMap; }查看全部
-
//初始化甲方密鑰對(duì). public static Map<String,Object> generateKey(){ //實(shí)例化密鑰對(duì)生成器 KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("DH"); //初始化密鑰對(duì)生成器 keyPairGenerator.initialize(KEY_SIZE); //生成密鑰對(duì) KeyPair keyPair=keyPairGenerator.generateKeyPair(); //甲方公鑰 DHPublicKey publicKey=(DHPublicKey) keyPair.getPublic(); //甲方私鑰 DHPrivateKey privateKey=(DHPrivateKey) keyPair.getPrivate(); //將密鑰存儲(chǔ)在map中 Map<String,Object> keyMap=new HashMap<String,Object>(); keyMap.put(PUBLIC_KEY, publicKey); keyMap.put(PRIVATE_KEY, privateKey); return keyMap; }查看全部
-
DH密鑰交換查看全部
-
密鑰構(gòu)建:KeyAgreement 1.static KeyAgreement getInstance(String algorithm) 生成實(shí)現(xiàn)指定密鑰一致算法的KeyAgreement對(duì)象 2.static KeyAgreement getInstance(String algorithm,Provider provider) 為來自指定提供程序的指定密鑰一致算法生成一個(gè)KeyAgreement對(duì)象查看全部
-
發(fā)送方密鑰 KeyPair = PublicKey + PrivateKey(密鑰對(duì),用來存放公鑰和私鑰) PublixKey 公鑰 KeyPairGenerator ==> 通過這個(gè)類可以生成KeyPair KeyPairGenerator.getInstance("DH"); //也可以有第二個(gè)參數(shù),第二個(gè)參數(shù)是provider 接收方密鑰 KeyFactory 來生成密鑰,包括公鑰(generatePublic())和私鑰(generatePrivete()) X509EncodedKeySpec 他是根據(jù)ASN.1標(biāo)準(zhǔn)進(jìn)行密鑰編碼的類 DHPublicKey PublicKey的一種具體形式 DHParameterSpec DH算法中使用的參數(shù)的集合 KeyPairGenerator PrivateKey 密鑰構(gòu)建 KeyAgreement 該類提供密鑰一致性(或者密鑰交換)協(xié)議的功能 SecretKey KeyFactory X509EncodedKeySpec PublixKey 加密解密 Cipher 提供加解密的功能 Cipher cipher=Cipher.getInstance("DES"):查看全部
-
DH密鑰交換中的方法查看全部
-
KeyAgreement類用于生成本地密鑰(提供密鑰協(xié)定或密鑰交換協(xié)議的功能).使用其getInstance()靜態(tài)方法創(chuàng)建實(shí)例,參數(shù)是算法名,指定生成的本地密鑰符合某種特定算法. KeyAgreement類的init()方法用于給定密鑰初始化此密鑰協(xié)定.doPhase()方法用于用給定密鑰執(zhí)行此密鑰協(xié)定的下一個(gè)階段.兩個(gè)方法的參數(shù)都是Key類型,即使用公鑰、私鑰來初始化密鑰協(xié)定. KeyAgreement類的generateSecret()方法創(chuàng)建本地密鑰,參數(shù)是對(duì)稱加密算法名稱.返回SecretKey類型.查看全部
-
DH密鑰交換查看全部
-
KeyPairGenerator:密鑰對(duì)生成器 KeyGenerator:密鑰生成器 使用KeyPairGenerator的getInstance()靜態(tài)方法創(chuàng)建實(shí)例,參數(shù)是算法名稱.指定密鑰對(duì)生成器生成指定算法的密鑰對(duì). 使用KeyPairGenerator的initialize()方法初始化密鑰的長(zhǎng)度. 使用KeyPairGenerator的generateKeyPair()方法創(chuàng)建KeyPair實(shí)例.一個(gè)KeyPair實(shí)例表示一對(duì)密鑰,即一個(gè)密鑰對(duì).包括公鑰與私鑰. KeyPair的getPublic()方法返回PublicKey類型(公鑰). getPrivate()方法返回PrivateKey類型(私鑰). DHPublicKey接口、DHPrivateKey接口分別繼承PublicKey接口與PrivateKey接口. X509EncodedKeySpec實(shí)例作用是把密鑰按照X.509標(biāo)準(zhǔn)進(jìn)行編碼. 直接new一個(gè)實(shí)例,構(gòu)造方法參數(shù)是密鑰. KeyFactory是密鑰工廠,SecretKeyFactory也是密鑰工廠.但是前者可以產(chǎn)生密鑰對(duì),即公鑰、私鑰. 使用KeyFactory的getInstance()靜態(tài)方法返回一個(gè)KeyFactory實(shí)例,參數(shù)指定算法名,指定密鑰工廠產(chǎn)生的密鑰是符合某種特定算法. 使用KeyFactory的generatePublic()方法可以生成一個(gè)公鑰,參數(shù)是X509EncodedKeySpec的實(shí)例.返回PublicKey. 使用DHPublicKey的getParams()方法返回DHParameterSpec實(shí)例. DHParameterSpec:此類指定隨同DH算法使用的參數(shù)集合,用于通過一方的公鑰生成另一方的密鑰對(duì). 使用KeyPairGenerator的initialize()初始化方法時(shí),參數(shù)還可以是DHParameterSpec的實(shí)例.用于通過一方公鑰生成密鑰對(duì).查看全部
-
JAVA DH加密算法 DH算法的默認(rèn)密鑰長(zhǎng)度是1024,密鑰長(zhǎng)度必須是64的倍數(shù),在512到1024位之間. DH是一種適基于密鑰一致協(xié)議的加密算法 密鑰一致協(xié)議就是允許兩名用戶在公開媒體上交換信息以生成"一致"的、可以共享的密鑰. 由甲方產(chǎn)出一對(duì)密鑰(公鑰、私鑰),乙方依照甲方公鑰產(chǎn)生乙方密鑰對(duì)(公鑰、私鑰),以此為基線作為數(shù)據(jù)傳輸保密基礎(chǔ).同時(shí)雙方使用同一種對(duì)稱加密算法構(gòu)建本地密鑰(SecretKey)對(duì)數(shù)據(jù)加密. 在互通了本地密鑰算法后,甲乙雙方公開自己的公鑰,使用對(duì)方的公鑰和剛才產(chǎn)生的私鑰加密數(shù)據(jù),同時(shí)可以使用對(duì)方的公鑰和自己的私鑰對(duì)數(shù)據(jù)解密. 流程分析: 1.甲方構(gòu)建密鑰對(duì),將公鑰公布給乙方,將私鑰保留. 乙方通過甲方公鑰構(gòu)建密鑰對(duì),將公鑰公布給甲方,將私鑰保留. 2.甲方使用自己私鑰、乙方公鑰與約定數(shù)據(jù)對(duì)稱加密算法構(gòu)建本地密鑰,然后通過本地密鑰加密數(shù)據(jù),發(fā)送給乙方加密后的數(shù)據(jù). 乙方使用自己私鑰、甲方公鑰與約定數(shù)據(jù)對(duì)稱加密算法構(gòu)建本地密鑰,然后通過本地密鑰對(duì)數(shù)據(jù)解密. 3.乙方使用自己私鑰、甲方公鑰與約定數(shù)據(jù)對(duì)稱加密算法構(gòu)建本地密鑰,然后通過本地密鑰加密數(shù)據(jù),發(fā)送給甲方加密后的數(shù)據(jù). 甲方使用私鑰、乙方公鑰與約定數(shù)據(jù)對(duì)稱加密算法構(gòu)建本地密鑰,然后通過本地密鑰對(duì)數(shù)據(jù)解密.查看全部
-
DH Diffie-Hellman算法(D-H算法),密鑰一致協(xié)議。是由公開密鑰密碼體制的奠基人Diffie和Hellman所提出的一種思想。簡(jiǎn)單的說就是允許兩名用戶在公開媒體上交換信息以生成"一致"的、可以共享的密鑰。換句話說,就是由甲方產(chǎn)出一對(duì)密鑰(公鑰、私鑰),乙方依照甲方公鑰產(chǎn)生乙方密鑰對(duì)(公鑰、私鑰)。以此為基線,作為數(shù)據(jù)傳輸保密基礎(chǔ),同時(shí)雙方使用同一種對(duì)稱加密算法構(gòu)建本地密鑰(SecretKey)對(duì)數(shù)據(jù)加密。這樣,在互通了本地密鑰(SecretKey)算法后,甲乙雙方公開自己的公鑰,使用對(duì)方的公鑰和剛才產(chǎn)生的私鑰加密數(shù)據(jù),同時(shí)可以使用對(duì)方的公鑰和自己的私鑰對(duì)數(shù)據(jù)解密。不單單是甲乙雙方兩方,可以擴(kuò)展為多方共享數(shù)據(jù)通訊,這樣就完成了網(wǎng)絡(luò)交互數(shù)據(jù)的安全通訊!該算法源于中國(guó)的同余定理——中國(guó)馀數(shù)定理。 流程分析: 1.甲方構(gòu)建密鑰對(duì)兒,將公鑰公布給乙方,將私鑰保留;雙方約定數(shù)據(jù)加密算法;乙方通過甲方公鑰構(gòu)建密鑰對(duì)兒,將公鑰公布給甲方,將私鑰保留。 2.甲方使用私鑰、乙方公鑰、約定數(shù)據(jù)加密算法構(gòu)建本地密鑰,然后通過本地密鑰加密數(shù)據(jù),發(fā)送給乙方加密后的數(shù)據(jù);乙方使用私鑰、甲方公鑰、約定數(shù)據(jù)加密算法構(gòu)建本地密鑰,然后通過本地密鑰對(duì)數(shù)據(jù)解密。 3.乙方使用私鑰、甲方公鑰、約定數(shù)據(jù)加密算法構(gòu)建本地密鑰,然后通過本地密鑰加密數(shù)據(jù),發(fā)送給甲方加密后的數(shù)據(jù);甲方使用私鑰、乙方公鑰、約定數(shù)據(jù)加密算法構(gòu)建本地密鑰,然后通過本地密鑰對(duì)數(shù)據(jù)解密。 http://blog.csdn.net/sunny_sailor/article/details/7445649查看全部
-
非對(duì)稱加密算法的特點(diǎn): 算法強(qiáng)度復(fù)雜、安全性依賴于算法與密鑰.但是由于算法復(fù)雜,使得非對(duì)稱算法加解密速度沒有對(duì)稱算法加解密的速度快. 對(duì)稱密鑰體制中只有一種密鑰,并且是非公開的,如果要解密就得讓對(duì)方知道密鑰.所以保證其安全性就是保證密鑰的安全. 非對(duì)稱密鑰體制有兩種密鑰,其中一個(gè)是公開的,這樣就可以不需要像對(duì)稱密碼那樣向?qū)Ψ絺鬏斆荑€了.因此安全性就大了很多. 對(duì)稱密鑰與非對(duì)稱密鑰比較: 算法復(fù)雜度:對(duì)稱密鑰<非對(duì)稱密鑰 加解密速度:對(duì)稱密鑰>非對(duì)稱密鑰 安全性:對(duì)稱密鑰<非對(duì)稱密鑰查看全部
-
Java實(shí)現(xiàn)非對(duì)稱加密——概述 Ps1:非對(duì)稱加密算法概述,非對(duì)稱主要是相對(duì)于對(duì)稱加密算法而言的,對(duì)稱加密算法有一個(gè)密鑰和一個(gè)解鑰,非對(duì)稱算法有一個(gè)公鑰和一個(gè)私鑰,這兩個(gè)共同組成一個(gè)解鑰,才能實(shí)現(xiàn)解密。 Ps2:RSA是可以雙向加密的:私鑰加密,公鑰解密;公鑰加密,私鑰解密。 DH 秘鑰交換算法,算是非對(duì)稱加密算法的起源 RSA 基于因子分解,應(yīng)用最廣 RSA是可以雙向加密的,私鑰加密 公鑰解密;公鑰加密,私鑰解密,是目前世界上使用最廣的非對(duì)稱加密算法 ELGamal 基于離散對(duì)數(shù) ECC 橢圓曲線加密 非對(duì)稱加密算法 因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱加密算法. 非對(duì)稱加密算法需要兩個(gè)密鑰:公開密鑰和私有密鑰.公開密鑰與私有密鑰是一對(duì)的. 如果用公開密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密. 如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開密鑰才能解密(某些算法有提供). 非對(duì)稱加密算法實(shí)現(xiàn)機(jī)密信息交換的基本過程是: 甲方生成一對(duì)密鑰并將其中的一把作為公用密鑰向其它方公開,得到該公用密鑰的乙方使用該密鑰對(duì)信息進(jìn)行加密后再發(fā)送給甲方. 甲方再用自己保存的另一把專用密鑰對(duì)加密后的信息進(jìn)行解密. 另一方面,甲方可以使用乙方提供的公鑰對(duì)信息進(jìn)行加密后再發(fā)送給乙方,乙方再用自己的私匙對(duì)數(shù)據(jù)進(jìn)行解密. DH-密鑰交換算法是非對(duì)稱加密算法的起源. RSA-基于因子分解算法,是應(yīng)用最多的非對(duì)稱加密算法.查看全部
舉報(bào)
0/150
提交
取消