-
非對稱加密算法:查看全部
-
1.甲方構建密鑰對兒,將公鑰公布給乙方,將私鑰保留;雙方約定數據加密算法;乙方通過甲方公鑰構建密鑰對兒,將公鑰公布給甲方,將私鑰保留。 2.甲方使用私鑰、乙方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰加密數據,發送給乙方加密后的數據;乙方使用私鑰、甲方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰對數據解密。 3.乙方使用私鑰、甲方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰加密數據,發送給甲方加密后的數據;甲方使用私鑰、乙方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰對數據解密。查看全部
-
1.甲方構建密鑰對兒,將公鑰公布給乙方,將私鑰保留;雙方約定數據加密算法;乙方通過甲方公鑰構建密鑰對兒,將公鑰公布給甲方,將私鑰保留。 2.甲方使用私鑰、乙方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰加密數據,發送給乙方加密后的數據;乙方使用私鑰、甲方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰對數據解密。 3.乙方使用私鑰、甲方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰加密數據,發送給甲方加密后的數據;甲方使用私鑰、乙方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰對數據解密。查看全部
-
發送方密鑰 KeyPair = PublicKey + PrivateKey(密鑰對,用來存放公鑰和私鑰) PublixKey 公鑰 KeyPairGenerator ==> 通過這個類可以生成KeyPair KeyPairGenerator.getInstance("DH"); //也可以有第二個參數,第二個參數是provider 接收方密鑰 KeyFactory 來生成密鑰,包括公鑰(generatePublic())和私鑰(generatePrivete()) X509EncodedKeySpec 他是根據ASN.1標準進行密鑰編碼的類 DHPublicKey PublicKey的一種具體形式 DHParameterSpec DH算法中使用的參數的集合 KeyPairGenerator PrivateKey 密鑰構建 KeyAgreement 該類提供密鑰一致性(或者密鑰交換)協議的功能 SecretKey KeyFactory X509EncodedKeySpec PublixKey 加密解密 Cipher 提供加解密的功能查看全部
-
DH Diffie-Hellman算法(D-H算法),密鑰一致協議。是由公開密鑰密碼體制的奠基人Diffie和Hellman所提出的一種思想。簡單的說就是允許兩名用戶在公開媒體上交換信息以生成"一致"的、可以共享的密鑰。換句話說,就是由甲方產出一對密鑰(公鑰、私鑰),乙方依照甲方公鑰產生乙方密鑰對(公鑰、私鑰)。以此為基線,作為數據傳輸保密基礎,同時雙方使用同一種對稱加密算法構建本地密鑰(SecretKey)對數據加密。這樣,在互通了本地密鑰(SecretKey)算法后,甲乙雙方公開自己的公鑰,使用對方的公鑰和剛才產生的私鑰加密數據,同時可以使用對方的公鑰和自己的私鑰對數據解密。不單單是甲乙雙方兩方,可以擴展為多方共享數據通訊,這樣就完成了網絡交互數據的安全通訊!該算法源于中國的同余定理——中國馀數定理。 流程分析: 1.甲方構建密鑰對兒,將公鑰公布給乙方,將私鑰保留;雙方約定數據加密算法;乙方通過甲方公鑰構建密鑰對兒,將公鑰公布給甲方,將私鑰保留。 2.甲方使用私鑰、乙方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰加密數據,發送給乙方加密后的數據;乙方使用私鑰、甲方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰對數據解密。 3.乙方使用私鑰、甲方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰加密數據,發送給甲方加密后的數據;甲方使用私鑰、乙方公鑰、約定數據加密算法構建本地密鑰,然后通過本地密鑰對數據解密。 http://blog.csdn.net/sunny_sailor/article/details/7445649查看全部
-
對稱密鑰帶來的困擾是密鑰的傳輸 DH算法通過構建本地密鑰來解決這種困擾查看全部
-
DH 秘鑰交換算法,算是非對稱加密算法的起源 RSA 基于因子分解,應用最廣 RSA是可以雙向加密的,私鑰加密 公鑰解密;公鑰加密,私鑰解密,是目前世界上使用最廣的非對稱加密算法 ELGamal 基于離散對數 ECC 橢圓曲線加密查看全部
-
對稱加密算法中使用的是密鑰(SecretKey). 非對稱加密算法中使用的是密鑰對(公鑰、私鑰).查看全部
-
在使用之前需要為JDK添加新的Provider. RSA初始化密鑰對是通過KeyPairGenerator實現的.而ElGamal初始化密鑰對則是通過AlgorithmParameterGenerator實現的. 使用AlgorithmParameterGenerator的getInstance()靜態方法獲取AlgorithmParameterGenerator實例,參數是算法名. 使用AlgorithmParameterGenerator的init()方法進行初始化密鑰長度.查看全部
-
ElGamal非對稱加密算法 只提供公鑰加密,私鑰解密. ElGamal算法支持數據加密與數字簽名. 在JDK里并沒有提供對ElGamal算法的實現.而是通過BouncyCastle實現. 密鑰長度:160~16384(8的倍數),默認的密鑰長度為1024.查看全部
-
RSA非對稱加密算法使用場景. 一般公司這樣做的.甲乙各有自己的一套公鑰私鑰. 甲用乙公布的公鑰加密,信息傳遞到乙,乙用自己的私鑰解密. --- 這一套是乙方的公私鑰. 乙用甲公布的公鑰加密,信息傳遞到甲,甲用自己的私鑰解密. --- 這一套是甲方的公私鑰.查看全部
-
測試類: Map<String, Object> keyMap = RSA.generateKey(); RSAPublicKey pubKey = (RSAPublicKey) keyMap.get(RSA.PUBLIC_KEY); RSAPrivateKey priKey = (RSAPrivateKey) keyMap.get(RSA.PRIVATE_KEY); //公鑰加密,私鑰解密 byte[] target = RSA.encryptByPublicKey(pubKey, src.getBytes()); System.out.println(new String(RSA.decryptByPrivateKey(priKey, target)));查看全部
-
//使用私鑰加密 public static byte[] encryptByPrivateKey(RSAPrivateKey priKey, byte[] data){ byte[] key = priKey.getEncoded(); // 取得私鑰 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(key); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec); // 對數據加密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, privateKey); return cipher.doFinal(data); } //使用私鑰解密 public static byte[] decryptByPrivateKey(RSAPrivateKey priKey, byte[] data){ byte[] key = priKey.getEncoded(); // 取得私鑰,進行轉換. PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(key); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec); // 對數據解密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(data); }查看全部
-
//使用公鑰加密 public static byte[] encryptByPublicKey(RSAPublicKey pubKey, byte[] data){ byte[] key = pubKey.getEncoded(); // 取得公鑰,進行轉換. X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key publicKey = keyFactory.generatePublic(x509KeySpec); // 對數據加密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(data); } //使用公鑰解密 public static byte[] decryptByPublicKey(RSAPublicKey pubKey, byte[] data){ byte[] key = pubKey.getEncoded(); // 取得公鑰,進行轉換. X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key publicKey = keyFactory.generatePublic(x509KeySpec); // 對數據解密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, publicKey); return cipher.doFinal(data); }查看全部
-
JDK實現RSA算法: //生成密鑰對 public static Map<String, Object> generateKey(){ KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM); keyPairGen.initialize(1024); KeyPair keyPair = keyPairGen.generateKeyPair(); // 公鑰 RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 私鑰 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); Map<String, Object> keyMap = new HashMap<String, Object>(); keyMap.put(PUBLIC_KEY, publicKey); keyMap.put(PRIVATE_KEY, privateKey); return keyMap; }查看全部
舉報
0/150
提交
取消