📄 encryptedprivatekeyinfotest.java
字号:
package org.bouncycastle.jce.provider.test;import java.security.AlgorithmParameters;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.MessageDigest;import java.security.PrivateKey;import java.security.PublicKey;import java.security.SecureRandom;import java.security.Security;import java.security.spec.PKCS8EncodedKeySpec;import javax.crypto.Cipher;import javax.crypto.EncryptedPrivateKeyInfo;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.PBEKeySpec;import javax.crypto.spec.PBEParameterSpec;import org.bouncycastle.jce.provider.BouncyCastleProvider;import org.bouncycastle.util.test.SimpleTestResult;import org.bouncycastle.util.test.Test;import org.bouncycastle.util.test.TestResult;public class EncryptedPrivateKeyInfoTest implements Test{ String alg = "1.2.840.113549.1.12.1.3"; // 3 key triple DES with SHA-1 public TestResult perform() { try { KeyPairGenerator fact = KeyPairGenerator.getInstance("RSA", "BC"); fact.initialize(512, new SecureRandom()); KeyPair keyPair = fact.generateKeyPair(); PrivateKey priKey = keyPair.getPrivate(); PublicKey pubKey = keyPair.getPublic(); // // set up the parameters // byte[] salt = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int iterationCount = 100; PBEParameterSpec defParams = new PBEParameterSpec(salt, iterationCount); AlgorithmParameters params = AlgorithmParameters.getInstance(alg, "BC"); params.init(defParams); // // set up the key // char[] password1 = { 'h', 'e', 'l', 'l', 'o' }; PBEKeySpec pbeSpec = new PBEKeySpec(password1); SecretKeyFactory keyFact = SecretKeyFactory.getInstance(alg, "BC"); Cipher cipher = Cipher.getInstance(alg, "BC"); cipher.init(Cipher.WRAP_MODE, keyFact.generateSecret(pbeSpec), params); byte[] wrappedKey = cipher.wrap(priKey); // // create encrypted object // EncryptedPrivateKeyInfo pInfo = new EncryptedPrivateKeyInfo(params, wrappedKey); // // decryption step // char[] password2 = { 'h', 'e', 'l', 'l', 'o' }; pbeSpec = new PBEKeySpec(password2); cipher = Cipher.getInstance(pInfo.getAlgName(), "BC"); cipher.init(Cipher.DECRYPT_MODE, keyFact.generateSecret(pbeSpec), pInfo.getAlgParameters()); PKCS8EncodedKeySpec keySpec = pInfo.getKeySpec(cipher); if (!MessageDigest.isEqual(priKey.getEncoded(), keySpec.getEncoded())) { return new SimpleTestResult(false, "Private key does not match"); } // // using Cipher parameters test // pbeSpec = new PBEKeySpec(password1); keyFact = SecretKeyFactory.getInstance(alg, "BC"); cipher = Cipher.getInstance(alg, "BC"); cipher.init(Cipher.WRAP_MODE, keyFact.generateSecret(pbeSpec), params); wrappedKey = cipher.wrap(priKey); // // create encrypted object // pInfo = new EncryptedPrivateKeyInfo(cipher.getParameters(), wrappedKey); // // decryption step // pbeSpec = new PBEKeySpec(password2); cipher = Cipher.getInstance(pInfo.getAlgName(), "BC"); cipher.init(Cipher.DECRYPT_MODE, keyFact.generateSecret(pbeSpec), pInfo.getAlgParameters()); keySpec = pInfo.getKeySpec(cipher); if (!MessageDigest.isEqual(priKey.getEncoded(), keySpec.getEncoded())) { return new SimpleTestResult(false, "Private key does not match"); } return new SimpleTestResult(true, getName() + ": Okay"); } catch (Exception e) { return new SimpleTestResult(false, getName() + ": exception - " + e.toString(), e); } } public String getName() { return "EncryptedPrivateKeyInfoTest"; } public static void main( String[] args) { Security.addProvider(new BouncyCastleProvider()); Test test = new EncryptedPrivateKeyInfoTest(); TestResult result = test.perform(); System.out.println(result.toString()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -