Tag: bouncycastle

相当于java中的OpenSSL命令

我对java或openssl中的文件加密并不是很熟悉。 我从学校了解基础知识但从未实际实施过。 现在我已经获得了以下3个命令: //generate random base64 private key openssl rand -base64 32 -out (keypath) //Encrypt random key with public key openssl rsautl -encrypt -inkey (encryptionkey) -pubin -in (input) -out (output) //encrypt file openssl enc -aes-256-cbc -salt -in (input) -out (output) -pass file:(keypath) 我需要在java中完全复制它。 有这么简单的方法吗? 我可以使用哪个库让这更容易吗? 对于第一行,我使用java 7中的SecureRandom函数生成一个字节数组,然后使用apache commons编解码器库将其加载到base64。 像这样: byte[] bytes = new byte[32]; new […]

使用bouncycastle / spongycastle读取加密的私钥

我有一个密码保护,加密的RSA私钥,它是用PyCrypto(2.6.1)创建的,并根据他们的文档有以下格式: PrivateKeyInfo, PKCS#8 (DER SEQUENCE), PEM (RFC1423) ,见[ https: //www.dlitz.net/software/pycrypto/api/current/Crypto.PublicKey.RSA._RSAobj-class.html#exportKey] 。 如何使用Bouncycastle / Spongycastle解密此RSA密钥? 我已经搜索了Google很长一段时间,只得到了结果,这些结果要么不适用于版本1.50(因为PEMReader已被弃用并被删除),要么是PEMParser的例子似乎无法读取此格式。 顺便说一下:我错过了关于Bouncycastle的文件吗? 这是我加密的私钥的标题: —–BEGIN PRIVATE KEY—– Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,68949227DD8A502D xyz… 如果有人能帮助我,我真的很感激!

如何validationJava中的区分名称(DN)?

我试图在java中validationDN。 到目前为止,我已尝试使用Bouncy castle libryvalidation它 private boolean isValidDn(String dn) { try { X509Name name = new X509Name(dn); return true; } catch (IllegalArgumentException e) { } return false; } 此代码正在运行,但问题是此代码允许具有多个CN。 例如:此代码对CN = first,CN = second,ou = org,ou = org2,c = US返回true 但我希望validation只有在有一个cn,ou,o,c等时才返回true。 任何帮助,将不胜感激。

在JAVA中读取格式为PKCS1的RSA私钥

是否可以在JAVA中读取格式为PKCS1的RSA私钥而无需转换为PKCS8? 如果是,请欣赏示例代码。 —–BEGIN RSA PRIVATE KEY—– BASE64 ENCODED DATA —–END RSA PRIVATE KEY—–

用BCvalidation分离的签名

如何使用Java中的BouncyCastle提供程序validation分离的签名(CMS / pkcs#7签名)? 目前,我的代码抛出exception,消息message-digest attribute value does not match calculated value Security.addProvider(new BouncyCastleProvider()); File f = new File(filename); byte[] buffer = new byte[(int)f.length()]; DataInputStream in = new DataInputStream(new FileInputStream(f)); in.readFully(buffer); in.close(); CMSSignedData signature = new CMSSignedData(buffer); SignerInformation signer = (SignerInformation) signature.getSignerInfos().getSigners().iterator().next(); CertStore cs = signature.getCertificatesAndCRLs(“Collection”, “BC”); Iterator iter = cs.getCertificates(signer.getSID()).iterator(); X509Certificate certificate = (X509Certificate) iter.next(); […]

使用BouncyCastle将签名/身份validation的属性添加到CMS签名

我想使用bouncycastle生成一个简单的CMS签名。 这段代码有效! Security.addProvider(new BouncyCastleProvider()); String password = “123456”; KeyStore ks = KeyStore.getInstance(“PKCS12”); ks.load(new FileInputStream(“c:/cert_123456.p12”), password.toCharArray()); String alias = (String)ks.aliases().nextElement(); PrivateKey key = (PrivateKey)ks.getKey(alias, password.toCharArray()); Certificate[] chain = ks.getCertificateChain(alias); CMSSignedDataGenerator generator = new CMSSignedDataGenerator(); generator.addSigner(key, (X509Certificate)chain[0], CMSSignedDataGenerator.DIGEST_SHA1); ArrayList list = new ArrayList(); for (int i = 0; i < chain.length; i++) { list.add(chain[i]); } CertStore chainStore […]

坏填充exception – pkcs11中的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING

我的应用程序正在访问e-Token以解密来自服务器的响应 来自服务器的会话密钥使用以下方式加密: – RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING 我正在使用SunPKCS11 Provider来实现对加密令牌的访问。 每当我尝试使用上述机制解密时,即使用RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING,我得到: – **javax.crypto.BadPaddingException: doFinal() failed at sun.security.pkcs11.P11RSACipher.implDoFinal(P11RSACipher.java:328) at sun.security.pkcs11.P11RSACipher.engineDoFinal(P11RSACipher.java:353) at javax.crypto.Cipher.doFinal(DashoA13*..) 以下是我的代码: – private static final String TRANSFORMATION = “RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING”; private static final String SECURITY_PROVIDER = “BC”; private static final String DIGEST_ALGORITHM = “SHA-256”; private static final String MASKING_FUNCTION = “MGF1”; […]

将证书链保存在pkcs12密钥库中

以下代码: //used Bouncy Castle provider for keyStore keyStore.setKeyEntry(alias, (Key)keyPair.getPrivate(), pwd, certChain); certChain持有最终证书和颁发者证书(即两个证书), 如果keyStore是PKCS12的实例,则不会将颁发者证书保存为保存到文件系统密钥库文件中的链的一部分。 如果密钥库类型是PKCS12-3DES-3DES它会保存两个证书。 为什么是这样? PKCS12是否假设两个证书都是链的一部分? 编辑:这是一个SSCCE 。 这适用于”JKS” ,失败并显示”PKCS12″ :只有链中的第一个证书可通过getCertificateChain(String)访问。 可以使用openssl pkcs12打开保存的文件,显示两个证书。 public void testKeyStore() { try { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(“RSA”); keyPairGenerator.initialize(1024); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); Certificate[] outChain = { createCertificate(“CN=CA”, publicKey, privateKey), createCertificate(“CN=Client”, publicKey, […]

如何使用Java中的BouncyCastle API加密和加密密码?

我对密码学很新,我使用BouncyCasetle API来加密密码并将其存储在数据库中。 对于加密,我使用的是SHA-1算法,我希望将密码加密以防止它再次进行字典攻击。 任何帮助,将不胜感激。

带有Bouncy Castle的256位AES / CBC / PKCS5Padding

我无法将以下JDK JCE加密代码映射到Bouncy Castles Light-weight API: public String dec(String password, String salt, String encString) throws Throwable { // AES algorithm with CBC cipher and PKCS5 padding Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”, “BC”); // Construct AES key from salt and 50 iterations PBEKeySpec pbeEKeySpec = new PBEKeySpec(password.toCharArray(), toByte(salt), 50, 256); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(“PBEWithSHA256And256BitAES-CBC-BC”); SecretKeySpec secretKey = new […]