标签: bouncycastle

在Java中通过SHA-256哈希字符串

通过环顾四周和一般的互联网,我找到了Bouncy Castle.我想使用Bouncy Castle(或其他一些免费提供的实用程序)在Java中生成一个SHA-256 Hash of String.看看他们的文档,我似乎找不到任何我想做的好例子.这里有人可以帮帮我吗?

java bouncycastle jce sha256

108
推荐指数
6
解决办法
19万
查看次数

scp来自java

通过Java编程语言执行scp传输的最佳方法是什么?我似乎可以通过JSSE,JSch或充气城堡java库来执行此操作.这些解决方案似乎都没有一个简单的答案.

java scp bouncycastle jsse jsch

78
推荐指数
5
解决办法
9万
查看次数

如何从商店导出不可导出的私钥

我需要从Windows商店导出私钥.如果密钥被标记为不可导出,我该怎么办?我知道有可能,程序越狱可以导出这个密钥.

要导出密钥,我使用Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair()该导出密钥(RSACryptoServiceProvider)cryptoProv.ExportParameters(true).导出的密钥我Org.BouncyCastle.Cms.CmsSignedDataGenerator用于CMS签名.

我需要.Net的解决方案,但任何解决方案都会很有用.谢谢.

.net encryption bouncycastle rsacryptoserviceprovider

46
推荐指数
4
解决办法
10万
查看次数

如何使用RSA和SHA256与.NET签署文件?

我的应用程序将采用一组文件并对其进行签名.(我不是要尝试签署程序集.)有一个.p12文件,我从中获取私钥.

这是我试图使用的代码,但我得到了一个System.Security.Cryptography.CryptographicException "Invalid algorithm specified.".

X509Certificate pXCert = new X509Certificate2(@"keyStore.p12", "password");
RSACryptoServiceProvider csp = (RSACryptoServiceProvider)pXCert.PrivateKey;
string id = CryptoConfig.MapNameToOID("SHA256");
return csp.SignData(File.ReadAllBytes(filePath), id);
Run Code Online (Sandbox Code Playgroud)

根据这个答案,它无法完成(RSACryptoServiceProvider不支持SHA-256),但我希望可以使用不同的库,如Bouncy Castle.

我是新手,我发现Bouncy Castle非常混乱.我正在将一个Java应用程序移植到C#,我必须使用相同类型的加密来签名文件,所以我坚持使用RSA + SHA256.

我怎么能用Bouncy Castle,OpenSSL.NET,Security.Cryptography或其他我没有听说过的第三方库来做到这一点?我假设,如果它可以在Java中完成,那么它可以在C#中完成.

更新:

这是我从poupou的anwser链接中得到的

        X509Certificate2 cert = new X509Certificate2(KeyStoreFile, password");
        RSACryptoServiceProvider rsacsp = (RSACryptoServiceProvider)cert.PrivateKey;
        CspParameters cspParam = new CspParameters();
        cspParam.KeyContainerName = rsacsp.CspKeyContainerInfo.KeyContainerName;
        cspParam.KeyNumber = rsacsp.CspKeyContainerInfo.KeyNumber == KeyNumber.Exchange ? 1 : 2;
        RSACryptoServiceProvider aescsp = new RSACryptoServiceProvider(cspParam);
        aescsp.PersistKeyInCsp = false;
        byte[] signed = aescsp.SignData(File.ReadAllBytes(file), "SHA256");
        bool isValid …
Run Code Online (Sandbox Code Playgroud)

.net c# openssl cryptography bouncycastle

43
推荐指数
6
解决办法
8万
查看次数

是否可以仅使用C#以编程方式生成X509证书?

我们正在尝试使用C#和BouncyCastle库以编程方式生成X509证书(包括私钥).我们尝试使用Felix Kollmann的这个示例中的一些代码,但证书的私钥部分返回null.代码和单元测试如下:

using System;
using System.Collections;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Prng;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.X509;

namespace MyApp
{
    public class CertificateGenerator
    {
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>Based on <see cref="http://www.fkollmann.de/v2/post/Creating-certificates-using-BouncyCastle.aspx"/></remarks>
        /// <param name="subjectName"></param>
        /// <returns></returns>
        public static byte[] GenerateCertificate(string subjectName)
        {
            var kpgen = new RsaKeyPairGenerator();

            kpgen.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024));

            var kp = kpgen.GenerateKeyPair();

            var gen = new X509V3CertificateGenerator();

            var certName = new X509Name("CN=" + subjectName); …
Run Code Online (Sandbox Code Playgroud)

c# bouncycastle pki x509certificate x509

40
推荐指数
2
解决办法
3万
查看次数

如何使用bouncycastle pgp加密字符串/流而不启动文件

我需要使用bouncycastle提供程序使用pgp加密流.我能找到的所有示例都是关于获取纯文本文件并加密,但是我没有文件,重要的是纯文本永远不会写入磁盘.

我见过的大多数方法都在使用

想要传入明文的PGPUtil.writeFileToLiteralData.我宁愿传递一个byte []或一个inputStream.

有人能指出我的一个例子

  • 从string/byte []/inputstream开始
  • 将所述字符串/ byte []加密到我可以写入文件的outputStrem
  • 从inputStream解密

万一其他人偶然发现并想要完整的解决方案

package com.common.security.pgp;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.security.Security;
import java.util.Date;
import java.util.Iterator;

import org.bouncycastle.bcpg.ArmoredOutputStream;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openpgp.PGPCompressedData;
import org.bouncycastle.openpgp.PGPCompressedDataGenerator;
import org.bouncycastle.openpgp.PGPEncryptedData;
import org.bouncycastle.openpgp.PGPEncryptedDataGenerator;
import org.bouncycastle.openpgp.PGPEncryptedDataList;
import org.bouncycastle.openpgp.PGPException;
import org.bouncycastle.openpgp.PGPLiteralData;
import org.bouncycastle.openpgp.PGPLiteralDataGenerator;
import org.bouncycastle.openpgp.PGPObjectFactory;
import org.bouncycastle.openpgp.PGPPrivateKey;
import org.bouncycastle.openpgp.PGPPublicKey;
import org.bouncycastle.openpgp.PGPPublicKeyEncryptedData;
import org.bouncycastle.openpgp.PGPPublicKeyRing;
import org.bouncycastle.openpgp.PGPPublicKeyRingCollection;
import org.bouncycastle.openpgp.PGPSecretKey;
import org.bouncycastle.openpgp.PGPSecretKeyRingCollection;
import org.bouncycastle.openpgp.PGPUtil;

/**
 * …
Run Code Online (Sandbox Code Playgroud)

java bouncycastle pgp

39
推荐指数
1
解决办法
4万
查看次数

Bouncycastle:X509CertificateHolder到X509Certificate?

在r146之前的版本中,可以X509Certificate直接创建对象.现在该API已弃用,新的​​API仅提供X509CertificateHolder对象.

我找不到将a转换为的X509CertificateHolder方法X509Certificate.

如何才能做到这一点?

bouncycastle certificate deprecated x509

38
推荐指数
2
解决办法
1万
查看次数

PBKDF2与Java中的bouncycastle

我正在尝试将密码安全地存储在数据库中,为此我选择存储使用PBKDF2函数生成的哈希.我想使用充气城堡库来做这个,但我不知道为什么我不能通过使用JCE接口让它工作...问题是在3种不同模式下生成散列:
1.使用PBKDF2WithHmacSHA1密钥工厂由sun提供
2.直接使用充气城堡api
3.通过JCE使用充气城堡
产生2个不同的值:一个与前两个共同,一个与第三个相同.

这是我的代码:

    //Mode 1

    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    KeySpec keyspec = new PBEKeySpec("password".toCharArray(), salt, 1000, 128);
    Key key = factory.generateSecret(keyspec);
    System.out.println(key.getClass().getName());
    System.out.println(Arrays.toString(key.getEncoded()));

    //Mode 2

    PBEParametersGenerator generator = new PKCS5S2ParametersGenerator();
    generator.init(PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(("password").toCharArray()), salt, 1000);
    KeyParameter params = (KeyParameter)generator.generateDerivedParameters(128);
    System.out.println(Arrays.toString(params.getKey()));

    //Mode 3

    SecretKeyFactory factorybc = SecretKeyFactory.getInstance("PBEWITHHMACSHA1", "BC");
    KeySpec keyspecbc = new PBEKeySpec("password".toCharArray(), salt, 1000, 128);
    Key keybc = factorybc.generateSecret(keyspecbc);
    System.out.println(keybc.getClass().getName());
    System.out.println(Arrays.toString(keybc.getEncoded()));
    System.out.println(keybc.getAlgorithm());
Run Code Online (Sandbox Code Playgroud)

我知道PBKDF2是使用HMAC SHA1实现的,这就是为什么我在最后一个方法中选择了作为算法的"PBEWITHHMACSHA1",我从充气城堡java docs中获取.

输出如下:

com.sun.crypto.provider.SunJCE_ae
[-53, 29, 113, -110, -25, 76, 115, -127, -64, 74, -63, 102, …
Run Code Online (Sandbox Code Playgroud)

java bouncycastle jce pbkdf2

38
推荐指数
2
解决办法
2万
查看次数

Android RSA Keypair Generation - 我应该使用Standard Java/Bouncy Castle/Spongy Castle/JSch/Other吗?

我一直在寻找一周左右的时间来实现我想到的方法.我已经看过很多关于所有这些不同方法的文章,但我仍然感到困惑,所以我希望有人可以传播他们对这些主题的知识,这样我就可以更轻松地创建我追捧的方法和在Android中实现它.

我的"追捧"方法:

  1. 必须生成RSA公钥和私钥
  2. 公共必须有PKCS#1填充
  3. 必须是RSA 2048
  4. 返回Byte数组中的公钥

显然你可以用四种方式去做:

  1. 标准Java
  2. 充气城堡
  3. 海绵城堡(Android友好?)
  4. JSch

由于我对安全性和Java整体都很陌生,所以我想知道是否有人能够最终对所有这些做出明确的解释.

以下是我尝试在4种不同的编程方法中实现我所追求的方法(如上所述)的方法.如果我不知道它是什么,因为我无法弄清楚各自的文件.请随时纠正我.

1.标准Java(不确定PKCS#1):

public byte[] returnPublicKeyInBytes() throws NoSuchAlgorithmException {
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
    kpg.initialize(2048);
    KeyPair keyPair = kpg.genKeyPair();
    byte[] pri = keyPair.getPrivate().getEncoded();
    byte[] pub = keyPair.getPublic().getEncoded();
    return pub;
}
Run Code Online (Sandbox Code Playgroud)

2. Bouncy Castle(尚未功能= /创意?):

public byte[] returnPublicKeyInBytes() throws NoSuchAlgorithmException {
    RSAKeyPairGenerator r = new RSAKeyPairGenerator();
    r.init(new KeyGenerationParameters(new SecureRandom(),4096));
    AsymmetricCipherKeyPair keys = r.generateKeyPair();
    CipherParameters pri = keys.getPrivate();
    CipherParameters pub = keys.getPublic();
    byte[] pubbyte = pub.toString().getBytes();
    return pubbyte; //NOT WORKING …
Run Code Online (Sandbox Code Playgroud)

java security android rsa bouncycastle

34
推荐指数
1
解决办法
2万
查看次数

Android 4.2破坏了我的加密/解密代码,提供的解决方案无效

首先,我已经看到 Android 4.2 在Android 4.2 和提供的解决方案破坏了我的AES加密/解密代码加密错误:

SecureRandom sr = null;
if (android.os.Build.VERSION.SDK_INT >= JELLY_BEAN_4_2) {
    sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
} else {
    sr = SecureRandom.getInstance("SHA1PRNG");
}
Run Code Online (Sandbox Code Playgroud)

对我不起作用,因为,当解码Android 4.2中Android <4.2加密的数据时,我得到:

javax.crypto.BadPaddingException: pad block corrupted
at com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(BaseBlockCipher.java:709)
Run Code Online (Sandbox Code Playgroud)

我的代码很简单,直到Android 4.2才开始工作:

public static byte[] encrypt(byte[] data, String seed) throws Exception {

    KeyGenerator keygen = KeyGenerator.getInstance("AES");
    SecureRandom secrand = SecureRandom.getInstance("SHA1PRNG");
    secrand.setSeed(seed.getBytes());
    keygen.init(128, secrand);

    SecretKey seckey = keygen.generateKey();
    byte[] rawKey = seckey.getEncoded();

    SecretKeySpec skeySpec = new SecretKeySpec(rawKey, "AES");
    Cipher cipher = …
Run Code Online (Sandbox Code Playgroud)

android cryptography bouncycastle

34
推荐指数
4
解决办法
3万
查看次数