Tag: bouncycastle

服务器端的BouncyCastle与Android手机作为客户端

我目前在让BouncyCastle工作时遇到一些困难。 现在正在搜索这几天,所以我希望你能提供任何有用的见解。 这是设置。 使用REST协议,Android客户端将POST消息发送到服务器。 我用表示这些消息的类创建了一个单独的项目,以便我可以将它作为库包含在客户端和服务器上。 消息对象首先被解析为JSON字符串,然后在服务器上进行解释。 为了数据完整性,消息包含数字签名(DSA)。 我之前就这个问题提出了一个关于公钥交换的问题。 我得到的答案很有帮助,因为这似乎正常。 但是,validation仍然失败。 Nikolay Elenkov在另一个post中的回答提到了一个可能的原因:“顺便说一句,如果你与一个提供商打交道可能会更容易,所以你可能也想在服务器上使用Bouncy Castle。” 这是我遇到麻烦的地方(因为这是一个不同的问题,我为此提出了一个新主题) 以下是来自消息类(来自公共库)的代码的摘录: import org.bouncycastle.jce.provider.BouncyCastleProvider; // …. private byte[] signature; // …. public void sign(DSAPrivateKey key) throws Exception { Security.addProvider(new BouncyCastleProvider()); Signature signer = Signature.getInstance(“SHA1withDSA”); signer.initSign(key); signer.update(this.toByteArray()); this.signature = signer.sign(); } public boolean verifySignature(DSAPublicKey key) throws Exception { Security.addProvider(new BouncyCastleProvider()); Signature signer = […]

ColdFusion 10中的BouncyCastle库

我一直在尝试在ColdFusion 10中使用RSA私钥加密并安装BouncyCastle库,因为它支持我的应用程序所需的加密模式。 尝试使用JavaLoader加载库导致错​​误(“类在bootclasspath上”和“JCE无法validation提供程序BC”)所以我必须静态安装它… 将jar复制到%CF_ROOT%/jre/lib/ext/并将以下内容添加到%CF_ROOT%/jre/lib/security/java.security : security.provider.=org.bouncycastle.jce.provider.BouncyCastleProvider 在没有意识到的情况下,我还从代码中删除了库,但使用该库的语句仍然有效: var privateKey = createObject(“java”, “org.bouncycastle.util.io.pem.PemReader”).init( createObject(“java”, “java.io.FileReader”).init(LOCAL.privateKeyPath) ).readPemObject().getContent(); 所以我要么在我的ColdFusion安装中永久安装BouncyCastle,要么包含在ColdFusion中。 我已经删除静态提供程序安装并使用“BC”提供程序加密继续工作而不进行修改。 如果BouncyCastle与CF捆绑在一起那么这很好,但是在运行同样更新版本的ColdFusion(CF10更新13)的另一台机器上,createObject语句失败,因为它无法找到PemReader类。 我用谷歌搜索了我的眼睛血腥,找不到任何关于BouncyCastle的文件被包含在任何版本的CF中 – 除了关于CF10 EULA中关于BouncyCastle的条款。 问题是:BouncyCastle是否包含在CF10中,如果是这样,我如何确保它已启用?

实施充气城堡aes 256

我正在开发一个聊天应用程序。 主要function是以加密forms发送消息,当它们到达目的地时,它们可以被解密。 我遇到的问题是邮件在目的地没有被解密,但是它们以加密forms到达目的地。 代码如何工作: 客户端A向客户端B发送消息“Hello”… 当客户端A点击按钮“发送消息”时,我将该文本保存在字符串中,然后将该字符串与密钥和iv一起传递给方法加密,如下所示…… en=enc.encrypt(msg.getBytes(), key.getBytes(), iv.getBytes()); 我将该字节( en )转换为字符串并将其发送到另一个客户端B. 当我打开另一个接收消息的类时,我得到字符串(en),然后再将其转换为字节,然后传递给方法Decrypt。 但每当我运行该项目时,它都无法运行。 试图在尝试捕获中做到这一点,但也没有工作。 也许是因为它已经在一个很大的尝试捕获声明已经使它更令人困惑。 我的代码: package com.socket; import org.bouncycastle.crypto.CipherParameters; import org.bouncycastle.crypto.engines.AESEngine; import org.bouncycastle.crypto.modes.CBCBlockCipher; import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.crypto.params.ParametersWithIV; public class Encrypt { public Encrypt() { } public static byte[] cipherData(PaddedBufferedBlockCipher cipher, byte[] data) throws Exception { int minSize = cipher.getOutputSize(data.length); byte[] outBuf […]

如何用Bouncy Castle生成对称密钥?

如何使用Bouncy Castle生成对称密钥? PrivateKeyFactory和PublicKeyFactory似乎都与AsymmetricKeyParameter相关。 我不想知道任何JCA / JCE API – 相反,我只对Bouncy Castle特定的API感兴趣。 可以(应该)我只生成一个随机字节?

让BouncyCastle解密GPG加密的消息

如何让BouncyCastle解密GPG加密的邮件? 我使用gpg –gen-key在CentOS 7命令行创建了一个GPG密钥对。 我选择RSA RSA作为加密类型,我使用gpg –export-secret-key -a “User Name” > /home/username/username_private.key导出密钥gpg –export-secret-key -a “User Name” > /home/username/username_private.key和gpg –armor –export 66677FC6 > /home/username/username_pubkey.asc 我能够将username_pubkey.asc导入另一个电子邮件帐户的远程Thunderbird客户端,并成功将加密的电子邮件发送到username@mydomain.com。 但是当我在mydomain.com上运行的Java / BouncyCastle代码尝试解密GPG编码的数据时,它会出现以下错误: org.bouncycastle.openpgp.PGPException: Encrypted message contains a signed message – not literal data. 如果你查看下面的代码,你会看到这与PGPUtils.decryptFile()的行相对应,其中说明了else if (message instanceof PGPOnePassSignatureList) {throw new PGPException(“Encrypted message contains a signed message – not literal data.”); […]

在充气城堡中生成ECDSA私钥会返回PUBLIC密钥

我试图使用充气城堡来生成ECDSA密钥。 代码似乎从Java的角度来看很好; 但是,当我转储文件并尝试validation数据时,OpenSSL不喜欢数据的格式。 经过一番研究,我认为充气城堡正在将私钥编码为公钥。 这是我的Java代码: public class Test { public static void main(String[] args) { Security.addProvider(new BouncyCastleProvider()); System.out.println(“Starting…”); String name = “prime256v1”; try { KeyPairGenerator kpg = KeyPairGenerator.getInstance(“ECDSA”, BouncyCastleProvider.PROVIDER_NAME); kpg.initialize(new ECGenParameterSpec(name)); KeyPair keyPair = kpg.generateKeyPair(); FileOutputStream writer = new FileOutputStream(“private.key”); writer.write(keyPair.getPrivate().getEncoded()); writer.close(); } catch(Exception e) { e.printStackTrace(); } } } private.key文件以有效的DER格式生成; 但是,当我运行以下命令来查看密钥的ASN.1结构时: $ openssl asn1parse […]

用Bouncy Castle复制Java中的’openssl smime’?

我手头有问题。 我的不了解Java的同事正在使用OpenSSL命令对文件进行签名,如下所示: openssl smime -binary -sign -certfile WWDR.pem -signer passcertificate.pem \ -inkey passkey.pem -in manifest.json -out signature -outform DER \ -passin pass:12345 如您所见,这里有三个文件被赋予openssl命令以生成签名。 现在我们想要使用Java复制相同的function,因为我们假设要签名的内容将是动态的,并且本质上是服务器端的。 我读到BouncyCastle是要走的路。 但我不知道如何使用该库。 我对密码技术也不是很熟悉。 我无法理解如何使用上面的所有三个文件来对manifest.json的内容进行签名。 如果有人可以指导我找到正确的代码或给我一个开始,我将非常感谢你的努力。

BouncyCastle找不到它提供的算法?

我正在玩BouncyCastle 1.46令我惊讶的是,下面的片段中的捕获块经常被绊倒。 Security.addProvider(new BouncyCastleProvider()); final Set found = new HashSet(); final Set missing = new HashSet(); final DefaultSignatureAlgorithmIdentifierFinder finder = new DefaultSignatureAlgorithmIdentifierFinder(); for (Service service : new BouncyCastleProvider().getServices()) { if (“Signature”.equals(service.getType())) { final String algorithm = service.getAlgorithm(); try { finder.find(algorithm); found.add(algorithm); } catch (IllegalArgumentException ex) { missing.add(algorithm); } } } System.out.println(“Found: ” + found); System.out.println(“Missing: […]

Java如何使用私钥文件而不是PEM来解密?

使用Java和Bouncy Castle 1.52,我可以使用以下代码通过PEM证书加载私钥。 我还有一个PKCS8格式的private.key文件。 直接使用private.key文件而不是PEM的代码是什么? String keyPath = “C:\\RSA7\\privatenopass.pem”; BufferedReader br = new BufferedReader(new FileReader(keyPath)); PEMParser pp = new PEMParser(br); PEMKeyPair pemKeyPair = (PEMKeyPair) pp.readObject(); KeyPair kp = new JcaPEMKeyConverter().getKeyPair(pemKeyPair); pp.close(); cipher.init(Cipher.DECRYPT_MODE, kp.getPrivate());

PBEWITHSHA256AND128BITAES-CBC-BC在RedHat 6.4上创建java.security.NoSuchAlgorithmException

我们有一个使用Bouncy Castle的应用程序使用PBEWITHSHA256AND128BITAES-CBC-BC算法加密数据。 它在运行OpenJDK 1.7 Ubuntu运行良好。 但是当我们将它移动到也运行OpenJDK 1.7 RedHat 6.4 ,我们得到以下exception: java.security.NoSuchAlgorithmException 关于可能导致这种情况的任何想法。 我们如何在RedHat 6.4添加PBEWITHSHA256AND128BITAES-CBC-BC算法? ps应用程序在JBoss运行。 private String cryptoAlgorithm = “PBEWITHSHA256AND128BITAES-CBC-BC”; Security.addProvider(new BouncyCastleProvider()); // load passPhrase from configured external file to char array. char[] passPhrase = null; try { passPhrase = loadPassPhrase(passPhraseFile); } catch (FileNotFoundException e) { throw BeanHelper.logException(LOG, methodName, new EJBException(“The file not found: ” […]