Tag: bouncycastle

为什么我的密钥标识符不匹配?

我正在尝试解密S / MIME电子邮件(最初通过Outlook发送),为此,我正在使用bouncycastle API。 不过,我遇到了困难。 我在Windows证书存储区中有收件人的证书。 我之前用它将签名和加密的电子邮件发送给另一方,然后他们用它向我发送加密回复。 然后我将证书(带私钥)导出为.pfx文件,然后将此pfx文件加载到Java KeyStore中。 但是,它不起作用,我怀疑这是因为主题密钥标识符不匹配。 这是我用来从KeyStore获取主题密钥id的代码: KeyStore ks = KeyStore.getInstance(“PKCS12”); char[] pw = “password”.toCharArray(); ks.load(new FileInputStream(“d:\\cert_priv_key.pfx”), pw); Enumeration en = ks.aliases(); while( en.hasMoreElements() ) { String alias = (String)en.nextElement(); System.out.println(alias); if( ks.isKeyEntry(alias) ) { Certificate[] chain = ks.getCertificateChain(alias); X509Certificate cert = (X509Certificate)chain[0]; byte[] id = cert.getExtensionValue(“2.5.29.14″); System.out.println(” ” + toHex(id)); […]

AES解密与充气城堡

我试图调整http://www.java2s.com/Code/Java/Security/Basicsymmetricencryptionexample.htm中的示例代码,必须使用3个参数调用,模式(加密或解密),IV和密钥。 它还可以读取和写入特定文件。 到目前为止,我忽略了给定的IV和键,直到我完成其余的运行。 我的代码成功地从文件加密明文,并将密文写入文件,但解密不起作用。 似乎解密模式读取的字节数多于加密写入的字节数,并且我得到块对齐错误。 我确定解密部分的某处存在一些基本错误,但我不知道它是什么。 如果有人能够识别问题或者可以看到任何可能导致它的明显错误,请告诉我。 错误发生在 try{ ctLength += cipher.doFinal(cipherText, ctLength);}catch{IllegalBlockSizeException e) 代码行: import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Writer; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.Security; import java.util.Arrays; import javax.crypto.BadPaddingException; […]

我可以使用标准Java Cipher API使用BouncyCastle的Tweakable Block Ciphers吗?

BouncyCastle提供了Threefish的实现,可以将调整作为参数: ThreeFishEngine engine = new ThreeFishEngine(256); engine.init(true, new TweakableBlockCipherParams(…)); 但是, TweakableBlockCipherParams与Java默认Cipher实例使用的AlgorithmParameter类型不兼容。 有没有办法通过调整来初始化这个密码? Cipher cipher = Cipher.getInstance(“Threefish-256/CBC/NoPadding”); cipher.init(???);

Parent Last Classloader解决Java类路径地狱?

我有一个项目使用两个版本的bouncyCastle jars bcprov-jdk15和bcprov-jdk16。 jvm加载旧版本,但我写的一个function需要运行更新的版本。 我试图通过使用自定义类加载器来解决这个类路径地狱。 经过一些谷歌搜索并借助之前的Stackoverflow回答[1] [2]和本博客 ,我编写了以下Parent Last Class加载器,以便在委托给父类加载器之前从较新的jar加载类。 public class ParentLastClassLoader extends ClassLoader { private String jarFile; //Path to the jar file private Hashtable classes = new Hashtable(); //used to cache already defined classes public ParentLastClassLoader(ClassLoader parent, String path) { super(parent); this.jarFile = path; } @Override public Class findClass(String name) throws ClassNotFoundException { […]

为什么keyStore.aliases()对于pkcs12是空的

我正在尝试使用以下代码从.p12文件加载PrivateKey: Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); java.security.KeyStore keyStore = KeyStore.getInstance(“PKCS12”, “BC”); keyStore.load(new FileInputStream(new File(“my_domain_com.p12”)), password); keyStore.aliases().hasMoreElements(); //this is false java.security.PrivateKey privateKey = (PrivateKey) keyStore.getKey(“SomeAlias”, password); 我试图找出没有别名的原因。 但是我无法找到。 空的别名可能是什么原因? 我想获取私钥,并使用此密钥生成一些文本。 还有其他的apporach吗? 我也有.cer文件,但我不确定我应该一起使用。

使用在openjre中需要Java Policy Files的加密

如果我想使用java和加密密钥长度超过128位,我必须使用Java策略文件。 如何使用openjre启动并运行这些应用程序? 我得到了相同的错误,我使用oracle jre没有策略文件,但我不能简单地使用Oracle策略文件? 或者我可以吗? 或者用openjdk帮助构建项目? 谢谢

java.lang.IllegalArgumentException:string curve25519 not a OID bouncycastle 1.52

我正在尝试使用/ java bouncy castle 1.52实现为曲线25519生成一个密钥对 java.lang.IllegalArgumentException:string curve25519不是OID 这是我的代码: public KeyPair generateKeys() throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException { ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec(“curve25519”); KeyPairGenerator g = KeyPairGenerator.getInstance(“ECDSA”, “BC”); g.initialize(ecSpec, new SecureRandom()); return g.generateKeyPair(); } 这段代码的结果是下面的堆栈跟踪: java.lang.IllegalArgumentException:string curve25519不是org.bouncycastle.asn1.ASN1ObjectIdentifier上的OID。(未知来源)org.bouncycastle.jcajce上的org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey.getEncoded(未知来源)位于org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey。(未知来源)的.provider.asymmetric.ec.BCECPrivateKey.getPublicKeyDetails(未知来源)org.bouncycastle.jcajce.provider.asymmetric.ec.KeyPairGeneratorSpi $ EC。在com.poc.databank.encryption.BouncyCastleEncryption.generateKeys(BouncyCastleEncryption.java:22)的com.poc.databank.encryption.BouncyCastleTest.testApp(BouncyCastleTest.java:16)的sun.reflect.NativeMethodAccessorImpl上生成KeyPair(未知来源)。在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)的java.lang.reflect.Method.invoke(Method.java:)中的invoke0(本地方法) 606)在org.junit.runners.model。 FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:47)org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44 )org.junit.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)org.junit.runners.BlockJUnit4ClassRunner.runChild(org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) BlockJUnit4ClassRunner.java:70)org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:238)org.junit.runners.ParentRunner $ 1 .schedule(ParentRunner.java:63)org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:53)org.junit.runners org.eclipse.jdt.internal.junit4.runner.JUnit4Tes上org.junit.runners.ParentRunner.run(ParentRunner.java:309)的.ParentRunner $ 2.evaluate(ParentRunner.java:229) tReference.run(JUnit4TestReference.java:50)org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests( RemoteTestRunner.java:467)org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java: 390)at […]

椭圆曲线点

目前我正在研究一个使用椭圆曲线的项目。 请给我一个解决方案,确定一个点是否在椭圆曲线上? 以及如何在椭圆曲线上得到一个点

Java BouncyCastle ECC密钥和自签名证书

几个小时以来,我一直在寻找一个用于创建椭圆曲线(EC)密钥和自签名证书的Java示例。 到目前为止,我只发现了片段和示例,其中许多都不起作用。 更新: 我在这里取得了一些进展,这是我的代码,对于任何可能发现它有用的人来说! 只需要弄清楚如何自我签名吧! import org.bouncycastle.asn1.x500.X500Name; import org.bouncycastle.jce.ECNamedCurveTable; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.jce.spec.ECParameterSpec; import org.bouncycastle.operator.ContentSigner; import org.bouncycastle.operator.ContentVerifierProvider; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; import org.bouncycastle.operator.jcajce.JcaContentVerifierProviderBuilder; import org.bouncycastle.pkcs.PKCS10CertificationRequest; import org.bouncycastle.pkcs.PKCS10CertificationRequestBuilder; import org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequestBuilder; import java.security.*; /** * A simple example showing generation and verification of a PKCS#10 request. */ public class genECKeyExample { private static final String BC = BouncyCastleProvider.PROVIDER_NAME; public […]

使用BouncyCastlevalidationJava中的ECDSA签名时出错

我已经测试了一个解决方案,以validationECDSA签名( 如何从EC公钥字节中获取PublicKey对象? ),它与给定数据完美配合。 这是数据: byte[] pubKey = DatatypeConverter.parseHexBinary(“049a55ad1e210cd113457ccd3465b930c9e7ade5e760ef64b63142dad43a308ed08e2d85632e8ff0322d3c7fda14409eafdc4c5b8ee0882fe885c92e3789c36a7a”); byte[] message = DatatypeConverter.parseHexBinary(“54686973206973206a75737420736f6d6520706f696e746c6573732064756d6d7920737472696e672e205468616e6b7320616e7977617920666f722074616b696e67207468652074696d6520746f206465636f6465206974203b2d29”); byte[] signature = DatatypeConverter.parseHexBinary(“304402205fef461a4714a18a5ca6dce6d5ab8604f09f3899313a28ab430eb9860f8be9d602203c8d36446be85383af3f2e8630f40c4172543322b5e8973e03fff2309755e654”); 这是代码(打印为true ): private static boolean isValidSignature(byte[] pubKey, byte[] message,byte[] signature) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException, InvalidKeySpecException { Signature ecdsaVerify = Signature.getInstance(“SHA256withECDSA”, new BouncyCastleProvider()); ecdsaVerify.initVerify(getPublicKeyFromBytes(pubKey)); ecdsaVerify.update(message); return ecdsaVerify.verify(signature); } private static PublicKey getPublicKeyFromBytes(byte[] pubKey) throws NoSuchAlgorithmException, InvalidKeySpecException { ECNamedCurveParameterSpec spec […]