本文整理匯總了Java中javax.crypto.KeyAgreement.doPhase方法的典型用法代碼示例。如果您正苦於以下問題:Java KeyAgreement.doPhase方法的具體用法?Java KeyAgreement.doPhase怎麽用?Java KeyAgreement.doPhase使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類javax.crypto.KeyAgreement
的用法示例。
在下文中一共展示了KeyAgreement.doPhase方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。
示例1: getSecretKey
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
/**
* 根據對方的公鑰和自己的私鑰生成本地密鑰
*/
public static byte[] getSecretKey(byte[] publicKey, byte[] privateKey) throws Exception{
//實例化密鑰工廠
KeyFactory keyFactory = KeyFactory.getInstance("DH");
//將公鑰從字節數組轉換為publicKey
X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(publicKey);
PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);
//將私鑰從字節數組轉換為privateKey
PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec(privateKey);
PrivateKey priKey = keyFactory.generatePrivate(priKeySpec);
//準備根據以上公鑰和私鑰生成本地密鑰SecretKey
//先實例化KeyAgreement
KeyAgreement keyAgreement = KeyAgreement.getInstance("DH");
//用自己的私鑰初始化keyAgreement
keyAgreement.init(priKey);
//結合對方的公鑰進行運算
keyAgreement.doPhase(pubKey, true);
//開始生成本地密鑰secretKey 密鑰算法為對稱密碼算法
SecretKey secretKey = keyAgreement.generateSecret("DES"); //DES、3DES、AES
return secretKey.getEncoded();
}
示例2: testKeyAgreement
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
private static void testKeyAgreement(KeyPair kpA, KeyPair kpB, Provider p)
throws Exception {
KeyAgreement ka1 = KeyAgreement.getInstance("ECDH", p);
ka1.init(kpA.getPrivate());
ka1.doPhase(kpB.getPublic(), true);
byte[] s1 = ka1.generateSecret();
KeyAgreement ka2 = KeyAgreement.getInstance("ECDH", p);
ka2.init(kpB.getPrivate());
ka2.doPhase(kpA.getPublic(), true);
byte[] s2 = ka2.generateSecret();
if (Arrays.equals(s1, s2) == false) {
System.out.println("expected: " + toString(s1));
System.out.println("actual: " + toString(s2));
throw new Exception("Generated secrets do not match");
}
}
示例3: testAlgorithm
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
private static void testAlgorithm(KeyAgreement ka1, KeyPair kp1,
KeyAgreement ka2, KeyPair kp2, String algorithm) throws Exception {
SecretKey key1;
ka1.init(kp1.getPrivate());
ka1.doPhase(kp2.getPublic(), true);
System.out.println("Derive " + algorithm + " using SunJCE...");
key1 = ka1.generateSecret(algorithm);
ka2.init(kp1.getPrivate());
ka2.doPhase(kp2.getPublic(), true);
System.out.println("Derive " + algorithm + " using PKCS#11...");
SecretKey key2 = ka2.generateSecret(algorithm);
byte[] b1 = key1.getEncoded();
byte[] b2 = key2.getEncoded();
if (Arrays.equals(b1, b2) == false) {
System.out.println(b1.length + " bytes: " + toString(b1));
System.out.println(b2.length + " bytes: " + toString(b2));
throw new Exception(algorithm + " secret mismatch");
}
}
示例4: doEcDh
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
@Override
public final byte[] doEcDh(final Key privateKey,
final byte[] publicKey,
final EcCurve curveName) throws NoSuchAlgorithmException,
InvalidKeyException,
InvalidKeySpecException {
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.insertProviderAt(new BouncyCastleProvider(), 1);
}
KeyAgreement ka = null;
try {
ka = KeyAgreement.getInstance(ECDH, BouncyCastleProvider.PROVIDER_NAME);
}
catch (final NoSuchProviderException e) {
ka = KeyAgreement.getInstance(ECDH);
}
ka.init(privateKey);
ka.doPhase(loadEcPublicKey(publicKey, curveName), true);
return ka.generateSecret();
}
示例5: getSharedSecret
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
public static ECDHKeySet getSharedSecret (ECKey keyServer, ECKey keyClient) {
try {
ECPrivateKeySpec specPrivate = new ECPrivateKeySpec(keyServer.getPrivKey(), ecParameters);
ECPublicKeySpec specPublic = new ECPublicKeySpec(new ECPoint(keyClient.getPubKeyPoint().getXCoord().toBigInteger(), keyClient.getPubKeyPoint()
.getYCoord().toBigInteger()), ecParameters);
ECPrivateKey privateKey = (ECPrivateKey) kf.generatePrivate(specPrivate);
ECPublicKey publicKey = (ECPublicKey) kf.generatePublic(specPublic);
JCEECPrivateKey ecPrivKey = new JCEECPrivateKey(privateKey);
JCEECPublicKey ecPubKey = new JCEECPublicKey(publicKey);
KeyAgreement aKeyAgree = KeyAgreement.getInstance("ECDH");
aKeyAgree.init(ecPrivKey);
aKeyAgree.doPhase(ecPubKey, true);
return new ECDHKeySet(aKeyAgree.generateSecret(), keyServer.getPubKey(), keyClient.getPubKey());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
示例6: testDHDistinctParameters
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
/** This test tries a key agreement with keys using distinct parameters. */
@SuppressWarnings("InsecureCryptoUsage")
@Test
public void testDHDistinctParameters() throws Exception {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
keyGen.initialize(ike1536());
KeyPair keyPairA = keyGen.generateKeyPair();
keyGen.initialize(ike2048());
KeyPair keyPairB = keyGen.generateKeyPair();
KeyAgreement kaA = KeyAgreement.getInstance("DH");
kaA.init(keyPairA.getPrivate());
try {
kaA.doPhase(keyPairB.getPublic(), true);
byte[] kAB = kaA.generateSecret();
fail("Generated secrets with mixed keys " + TestUtil.bytesToHex(kAB) + ", ");
} catch (java.security.GeneralSecurityException ex) {
// This is expected.
}
}
示例7: run
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
@Override
public void run() {
try {
Log.d(TAG, "write start!");
writeDERObject(new DERObject(this.getKeyPair().getPublic().getEncoded()));
Log.d(TAG, "write finished!");
Log.d(TAG, "read start!");
DERObject responseDERObject = readDERObject();
Log.d(TAG, "read finished!");
KeyFactory keyFactory = KeyFactory.getInstance("ECDH", "SC");
X509EncodedKeySpec x509ks = new X509EncodedKeySpec(responseDERObject.getPayload());
PublicKey publicKey = keyFactory.generatePublic(x509ks);
KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH", "SC");
keyAgreement.init(this.getKeyPair().getPrivate());
keyAgreement.doPhase(publicKey, true);
final byte[] sharedKey = Arrays.copyOfRange(keyAgreement.generateSecret(), 0, Constants.SYMMETRIC_KEY_SIZE);
Log.d(TAG, "exchange finished!");
this.getResultListener().onSuccess(new SecretKeySpec(sharedKey, Constants.SYMMETRIC_CIPHER_ALGORITH));
} catch (Exception e) {
this.getResultListener().onError(e.getMessage());
}
}
示例8: getSecretKey
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
/**
* 構建密鑰
* @param publicKey
* @param privateKey
* @return
* @throws Exception
*/
public static byte[] getSecretKey(byte[] publicKey,byte[] privateKey)throws Exception{
//實例化密鑰工廠
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
//初始化公鑰
//密鑰材料轉換
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(publicKey);
//產生公鑰
PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
//初始化私鑰
//密鑰材料轉換
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(privateKey);
//產生私鑰
PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
//實例化
KeyAgreement keyAgree = KeyAgreement.getInstance(keyFactory.getAlgorithm());
keyAgree.init(priKey);
keyAgree.doPhase(pubKey, true);
//產生本地密鑰
SecretKey secretKey = keyAgree.generateSecret(SECRET_ALGORITHM);
return secretKey.getEncoded();
}
示例9: DHExchange
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
/**
* Use 1536 for Fast Prime Generation (less secure) or 2048 for slow prime generation (secure)
* @param strength
* @throws InvalidKeyException
* @throws IllegalStateException
* @throws InvalidAlgorithmParameterException
* @throws NoSuchAlgorithmException
* @throws NoSuchProviderException
* @throws InvalidKeySpecException
* @throws InvalidParameterSpecException
*/
public DHExchange(int strength) throws InvalidKeyException, IllegalStateException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException, InvalidParameterSpecException {
Security.addProvider(new org.spongycastle.jce.provider.BouncyCastleProvider());
AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance("DH", "SC");
paramGen.init(strength); // number of bits
AlgorithmParameters params = paramGen.generateParameters();
DHParameterSpec dhSpec = (DHParameterSpec)params.getParameterSpec(DHParameterSpec.class);
BigInteger p = dhSpec.getP();
BigInteger g = dhSpec.getG();
DHParameterSpec dhParams = new DHParameterSpec(p, g);
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH", "SC");
keyGen.initialize(dhParams, new SecureRandom());
KeyAgreement aKeyAgree = KeyAgreement.getInstance("DH", "SC");
KeyPair aPair = keyGen.generateKeyPair();
KeyAgreement bKeyAgree = KeyAgreement.getInstance("DH", "SC");
KeyPair bPair = keyGen.generateKeyPair();
aKeyAgree.init(aPair.getPrivate());
bKeyAgree.init(bPair.getPrivate());
aKeyAgree.doPhase(bPair.getPublic(), true);
bKeyAgree.doPhase(aPair.getPublic(), true);
}
示例10: generateSharedSecret
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
private static SecretKey generateSharedSecret(PrivateKey privateKey,
PublicKey publicKey) {
try {
KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH",
BouncyCastleProvider.PROVIDER_NAME);
keyAgreement.init(privateKey);
keyAgreement.doPhase(publicKey, true);
SecretKey key = keyAgreement.generateSecret("AES");
System.out.println("Shared key length: " + key.getEncoded().length);
return key;
} catch (InvalidKeyException | NoSuchAlgorithmException
| NoSuchProviderException e) {
e.printStackTrace();
return null;
}
}
示例11: getSecretKey
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
/**
* 構建密鑰
*
* @param publicKey
* 公鑰
* @param privateKey
* 私鑰
* @return
* @throws Exception
*/
private static SecretKey getSecretKey(String publicKey, String privateKey)
throws Exception {
// 初始化公鑰
byte[] pubKeyBytes = decryptBASE64(publicKey);
KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(pubKeyBytes);
PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
// 初始化私鑰
byte[] priKeyBytes = decryptBASE64(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(priKeyBytes);
Key priKey = keyFactory.generatePrivate(pkcs8KeySpec);
KeyAgreement keyAgree = KeyAgreement.getInstance(keyFactory
.getAlgorithm());
keyAgree.init(priKey);
keyAgree.doPhase(pubKey, true);
// 生成本地密鑰
SecretKey secretKey = keyAgree.generateSecret(SECRET_ALGORITHM);
return secretKey;
}
示例12: getSecretKey
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
/**
* 構建密鑰
*
* @param publicKey 公鑰
* @param privateKey 私鑰
* @return
* @throws Exception
*/
private static SecretKey getSecretKey(String publicKey, String privateKey)
throws Exception {
// 初始化公鑰
byte[] pubKeyBytes = decryptBASE64(publicKey);
KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(pubKeyBytes);
PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
// 初始化私鑰
byte[] priKeyBytes = decryptBASE64(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(priKeyBytes);
Key priKey = keyFactory.generatePrivate(pkcs8KeySpec);
KeyAgreement keyAgree = KeyAgreement.getInstance(keyFactory
.getAlgorithm());
keyAgree.init(priKey);
keyAgree.doPhase(pubKey, true);
// 生成本地密鑰
SecretKey secretKey = keyAgree.generateSecret(SECRET_ALGORITHM);
return secretKey;
}
示例13: testKeyAgreement
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
/**
* Test for <code>KeyAgreement</code> constructor Assertion: returns
* KeyAgreement object
*/
public void testKeyAgreement() throws NoSuchAlgorithmException,
InvalidKeyException, IllegalStateException {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
KeyAgreementSpi spi = new MyKeyAgreementSpi();
KeyAgreement keyA = new myKeyAgreement(spi, defaultProvider,
defaultAlgorithm);
assertEquals("Incorrect algorithm", keyA.getAlgorithm(),
defaultAlgorithm);
assertEquals("Incorrect provider", keyA.getProvider(), defaultProvider);
assertNull("Incorrect result", keyA.doPhase(null, true));
assertEquals("Incorrect result", keyA.generateSecret().length, 0);
keyA = new myKeyAgreement(null, null, null);
assertNull("Algorithm must be null", keyA.getAlgorithm());
assertNull("Provider must be null", keyA.getProvider());
try {
keyA.doPhase(null, true);
fail("NullPointerException must be thrown");
} catch (NullPointerException e) {
}
}
示例14: getSharedSecret
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
private static byte[] getSharedSecret(KeyPair serverPair, PublicKey clientKey) throws InvalidKeyException {
KeyAgreement agreement;
try {
agreement = KeyAgreement.getInstance("ECDH");
} catch (NoSuchAlgorithmException e) {
throw new AssertionError(e);
}
agreement.init(serverPair.getPrivate());
agreement.doPhase(clientKey, true);
return agreement.generateSecret();
}
示例15: generateECDHSecret
import javax.crypto.KeyAgreement; //導入方法依賴的package包/類
private byte[] generateECDHSecret(PrivateKey privateKey, PublicKey publicKey) {
try {
KeyAgreement ka = KeyAgreement.getInstance("ECDH", "BC");
ka.init(privateKey);
ka.doPhase(publicKey, true);
return ka.generateSecret();
} catch (NoSuchAlgorithmException | InvalidKeyException | NoSuchProviderException ex) {
log.error("Failed to generate ECDH secret", ex);
return null;
}
}