Tag: bouncycastle

使用轻量级API生成Bouncy Castle RSA密钥对

令人惊讶的是,网上关于使用Bouncy Castle的轻量级API的信息非常少。 环顾四周后,我能够把一个基本的例子放在一起: RSAKeyPairGenerator generator = new RSAKeyPairGenerator(); generator.init(new RSAKeyGenerationParameters ( new BigInteger(“10001”, 16),//publicExponent SecureRandom.getInstance(“SHA1PRNG”),//prng 1024,//strength 80//certainty )); AsymmetricCipherKeyPair keyPair = generator.generateKeyPair(); 我对RSA和幕后发生的数学有基本的了解,所以我理解了publicExponent和strength是什么。 我认为publicExponent指的是phi(pq)的互质,并且从我收集的它可以是小的(如3),只要使用适当的填充。 但是,我不知道certainty是指什么(某些地方提到它可能指的是一个百分比,但我想确定)。 SecureRandom的使用是不言自明的。 RSAKeyGenerationParameters的文档完全没有价值(毫不奇怪)。 我唯一的猜测是它与生成的键的准确性有关,但我想再次确定。 所以我的问题是什么是certainty和publicExponent适当值? PS请不要回答“这取决于具体情况 – 您希望信息的安全性”。 假设最高程度的安全性(即4096位RSA密钥或更高)是非常安全的,除非另有说明……我也非常感谢链接,这些链接提供了使用Bouncy Castle的轻量级API的良好示例(我不是所有对JCA实施感兴趣或任何与之相关的例子)。

用Android实现Bouncy Castle密码算法

我如何使用Bouncy Castle提供程序来实现诸如Serpent和Twofish之类的算法,因为Sun的提供商根本不实现这些算法。 我知道当多个提供程序可以实现相同的算法时,您将获得最高级别提供程序的实现,该提供程序将成为Sun提供程序。 如果由于某种原因您想要使用特定提供程序的实现(可能因为您知道它更快),您可以在两个arg版本的getInstance()中指定提供程序。 就我而言,Sun提供商根本没有实现我感兴趣的算法。 我试图实施Serpent: public static final String FILE_EXTENSION = “.serpent”; public static final String PROVIDER = “BC”; // Bouncy Castle public static final String BLOCK_CIPHER = “Serpent”; public static final String TRANSFORMATION = “Serpent/CBC/PKCS7Padding”; public static final String KEY_ALGORITHM = “PBKDF2WithHmacSHA1”; public static final String PRNG_ALGORITHM = “SHA1PRNG”; public static final int […]

ECDSA算法教程对字符串进行签名

你能帮我找一个简单的教程,讲解如何在java中使用ECDSA算法对字符串进行签名。 但是没有使用任何像bouncycastle这样的第三方库。 只是JDK 7.我发现很难搜索一个简单的例子,我是密码学的新手。 import java.io.*; import java.security.*; public class GenSig { /** * @param args the command line arguments */ public static void main(String[] args) { /* * Generate a DSA signature */ try { /* * Generate a key pair */ KeyPairGenerator keyGen = KeyPairGenerator.getInstance(“DSA”, “SUN”); SecureRandom random = SecureRandom.getInstance(“SHA1PRNG”, “SUN”); keyGen.initialize(1024, random); […]

RSA和PublicKey与dotnet互操作

嗨我正在使用此链接中的代码,您能否告诉我为什么签名validation无效? Java签名者正在使用带有SHA1withRSA的BouncyCastleProvider ,这里是dotnetvalidation码…. using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.OpenSsl; using Org.BouncyCastle.Security; using Org.BouncyCastle.Utilities.Encoders; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string pubkey = @”MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMf54mcK3EYJn9tT9BhRoTX+8AkqojIyeSfog9ncYEye0VXyBULGg2lAQsDRt8lZsvPioORZW7eB6IKawshoWUsCAwEAAQ==”; String signature = “770bb2610bf6b2602ce2b3ad8489054f4ed59c9b0c9299327f76ecbc60a8bb9a725cfae901fc189d4bafcf73a2f4aed8dffe9842f7b6196ddfcd040c7271c7ca”; String signData = “C2:AE:D6:2B:DF:A4”; byte[] expectedSig = […]

以PEM格式读取PKCS8:找不到提供者

尝试使用以下内容读取PEM格式的PKCS8私钥: private static PrivateKey loadPrivateKey() throws IOException, GeneralSecurityException, OperatorCreationException, PKCSException { FileReader fileReader = new FileReader(certsRoot + “/pep-client-key.pem”); PEMParser keyReader = new PEMParser(fileReader); JcaPEMKeyConverter converter = new JcaPEMKeyConverter(); InputDecryptorProvider decryptionProv = new JceOpenSSLPKCS8DecryptorProviderBuilder().build(“mypassword”.toCharArray()); Object keyPair = keyReader.readObject(); PrivateKeyInfo keyInfo; if (keyPair instanceof PKCS8EncryptedPrivateKeyInfo) { keyInfo = ((PKCS8EncryptedPrivateKeyInfo) keyPair).decryptPrivateKeyInfo(decryptionProv); // Exception thrown from here keyReader.close(); return […]

jce无法validation提供程序bc

我开发了一个应用程序,我在BountyCastle.jar的帮助下使用了Cryptography。 我还有一行Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 当我从Netbeans执行程序时,一切正常 但是当我将应用程序打包在一个可执行的jar中时,它在内部使用BouncyCastle jar并执行jar, 我越来越exception了 JCE无法validation提供程序BC java.lang.SecurityException:JCE无法对提供程序BC进行身份validation 还有其他approch来实现相同的。 因为非技术人员很难在jre的ext文件夹中添加BountyCastle.jar。 那么有没有其他方法来解决我的问题。 是否有任何方法可以在netbeans中打包jar时排除BountyCastle.jar,以便可以从外部lib文件夹访问。

如何使用JCA读取BouncyCastle私钥PEM文件?

在我们的一个应用程序中,使用BouncyCastle的PEMWriter存储私钥。 目前我正在调查是否可以摆脱BouncyCastle依赖,因为Java 7似乎拥有我们需要的一切。 唯一的问题是我无法读取存储在数据库中的私钥作为PEM编码的字符串(证书/公钥很好)。 如果我将私有密钥的PEM编码字符串从数据库保存到文件,我可以运行OpenSSL将密钥转换为PKCS#8格式,如下所示: openssl pkcs8 -topk8 -inform PEM -outform DER \ -in private_key.pem -out private_key.der -nocrypt 结果输出我可以base64编码,然后使用这个Java / JCA代码读取: byte[] privateKeyBytes = DatatypeConverter.parseBase64Binary(privateKeyDERcontents); PrivateKey prKey = KeyFactory.getInstance(“RSA”). generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes)); 这个私钥与预期存储的公钥匹配,即我可以从明文到密文和返回往返。 我的问题是:我能以某种方式直接读取原始PEM编码吗? 编辑 下面是一些使用BouncyCastle读取相关字符串的代码: if (Security.getProvider(“BC”) == null) { Security.addProvider(new BouncyCastleProvider()); } PEMReader pemReader = new PEMReader(new StringReader(privateKeyPEM)); KeyPair keyPair = (KeyPair) pemReader.readObject(); PrivateKey […]

如何使用海绵城堡为比特币曲线(secp256k1)创建ECDSA密钥对(256位)?

目前,当我使用以下方法创建密钥时 private KeyPair getKeyPair() throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException { KeyPairGenerator keyGen = KeyPairGenerator.getInstance(“ECDsA”, “SC”); ECGenParameterSpec ecSpec = new ECGenParameterSpec(“secp256k1”); keyGen.initialize(ecSpec, new SecureRandom()); return keyGen.generateKeyPair(); } KeyPairGenerator有另一种方法,我可以在其中指定keySize,但我不确定如何通过ecSpec。 public void initialize(int keysize, SecureRandom random)

Java BC SicBlockCipher直接输出等效于c#

我正在用C#实现一些东西,为此我有一个单独的规范和相当清楚的理解我需要做什么,但同时作为参考我有一个Java实现,并希望在这种情况下遵循Java实现尽我所能。 代码涉及加密流,Java源代码在这里相关的行在这里: private final StreamCipher enc; … BlockCipher cipher; enc = new SICBlockCipher(cipher = new AESEngine()); enc.init(true, new ParametersWithIV(new KeyParameter(secrets.aes), new byte[cipher.getBlockSize()])); … … byte[] ptype = RLP.encodeInt((int) frame.type); //Result can be a single byte long … … enc.processBytes(ptype, 0, ptype.length, buff, 0); out.write(buff, 0, ptype.length); //encrypt and write a single byte from the SICBlockCipher […]

从ECPrivateKey生成ECPublicKey

我正在尝试使用私钥和已知曲线生成公钥。 以下是我的代码: // Generate Keys ECGenParameterSpec ecGenSpec = new ECGenParameterSpec(“secp256r1”); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(“ECDSA”, “BC”); keyPairGenerator.initialize(ecGenSpec, new SecureRandom()); java.security.KeyPair pair = keyPairGenerator.generateKeyPair(); ECPrivateKey privateKey = (ECPrivateKey) pair.getPrivate(); ECPublicKey publicKeyExpected = (ECPublicKey) pair.getPublic(); // Expected public key System.out.print(“Expected Public Key: ” + BaseEncoding.base64Url().encode(publicKeyExpected.getEncoded())); // Generate public key from private key X9ECParameters ecp = SECNamedCurves.getByName(“secp256r1”); ECDomainParameters domainParams […]