我们有一个要求,在 Java 中进行加密,在 .NET 中进行解密。问题在于 .NET 中的非对称解密、Java 中使用的算法、模式和填充,而加密为“RSA/ECB/OAEPWithSHA-256AndMGF1Padding”。在.NET上,我尝试以各种不同的方式解密RsaCng、Rsa、Chilkat Rsa、带有OAEP填充的Bouncy Castle,但到目前为止没有任何效果。下面是代码片段。只有当Java的加密方式改为“RSA/ECB/OAEPWithSHA-1AndMGF1Padding”时,.NET才能够解密,但出于安全原因,Java无法更改加密方式。我们使用 PEM 文件进行解密,同时使用 CERT 进行加密。请让我们知道解决该问题的最佳方法。这与创建基于 SHA256 哈希的 PEM 文件有关吗?如果有人能帮助我,我将不胜感激。
下面提到了错误。RsaCng 和 Rsa:- 参数不正确。RsaCryptoService:- 解码 OAEP 填充时发生错误。Bouncy Castle:- 它给出了一个带有符号的 alpha-unicode 字符串。Chilkat:- 返回 null。
非对称加密的 Java 代码段:-
// Encrypt the symetric key
X509Certificate cert = ConduentCertificateLocator.getConduentCertificate();
PublicKey certKey = cert.getPublicKey();
Cipher c2 = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING");
//Cipher c2 = Cipher.getInstance("RSA");
c2.init(Cipher.ENCRYPT_MODE, certKey);
byte[] inputCertKey = key.getEncoded();
byte[] encryptedKey = c2.doFinal(inputCertKey);
String encryptedKeyUrl = encodeToURL(encryptedKey);
Run Code Online (Sandbox Code Playgroud)
用于非对称解密的.NET 片段:- 我们确实尝试了几种不同的方法。下面是代码。
A。RSAC加密服务
using (RSACryptoServiceProvider csp = new RSACryptoServiceProvider())
{ …Run Code Online (Sandbox Code Playgroud) Bouncy Castle附带的RSA实现仅允许加密单个数据块.RSA算法不适合流数据,不应该以这种方式使用.在这种情况下,您应该使用随机生成的密钥和对称密码加密数据,之后您应该使用RSA加密随机生成的密钥,然后将加密数据和加密随机密钥发送到另一端,他们可以反转过程(即,使用他们的RSA私钥解密随机密钥,然后解密数据).
我不能使用使用对称密钥的解决方法.那么,除了Bouncy Castle之外,还有RSA的其他实现吗?
我已经在Android和Java中将充气城堡城堡文件添加到了我的应用程序类路径中。这是我在两者中都使用过的代码。但是它似乎无法识别提供者“ BC”。
SecureRandom sr1=new SecureRandom().getInstance("SHA1PRNG", "BC");
System.out.println(sr1.getProvider());
sr1.setSeed(12);
byte[] a=new byte[0];
sr1.nextBytes(a);
int ai=a[0];
System.out.println(ai);
Run Code Online (Sandbox Code Playgroud)
它在android和java中都引发以下异常:
java.security.NoSuchProviderException: no such provider: BC
Run Code Online (Sandbox Code Playgroud)
如何纠正呢?
我没有在策略文件中添加提供程序。之后,我得到以下异常。
java.security.NoSuchAlgorithmException: no such algorithm: SHA1PRNG for provider
BC<br>
Run Code Online (Sandbox Code Playgroud)
这是否意味着充气城堡不提供“ SHA1PRNG”算法的实现?但是我导入有弹性城堡的全部原因是在android和java中都有一个公共提供程序,因此使用相同种子生成的随机数序列在android和java中都相同。
我已尝试使用各种版本的itext,包括带有试用许可证的itextgoogle,当我尝试运行我的代码时,我不断收到以下错误:
InputStream object = this.getResources().openRawResource(R.raw.itextkey);
LicenseKey.loadLicenseFile(object);
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream(android.os.Environment.getExternalStorageDirectory() + java.io.File.separator + java.io.File.separator + "testPDF.pdf"));
document.open();
document.add(new Paragraph("testing"));
} catch (DocumentException de) {
System.err.println(de.getMessage());
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
document.close();
Run Code Online (Sandbox Code Playgroud)
错误是:
04-26 20:18:12.761: E/dalvikvm(1927): Could not find class 'org.spongycastle.cert.X509CertificateHolder', referenced from method com.itextpdf.text.pdf.PdfReader.readDecryptedDocObj
04-26 20:18:12.761: W/dalvikvm(1927): VFY: unable to resolve new-instance 2251 (Lorg/spongycastle/cert/X509CertificateHolder;) in Lcom/itextpdf/text/pdf/PdfReader;
Run Code Online (Sandbox Code Playgroud)
我听说我需要自己构建iText,但我不知道从哪里开始/如何做到这一点.我发现的罐子的文件名不是很具描述性.
我正在尝试找到适用于JDK 1.7的Bouncycastle的pkcs库(pkcs10 CSR调用).有人可以告诉我哪个jar是什么,以及在pom.xml中添加的maven存储库是什么?我遇到了这个网站:http://mvnrepository.com/artifact/org.bouncycastle并且对版本数量感到困惑.我查看了bcmail jar(对于jdk 1.5),但没有找到JDK 1.7.
请帮忙.谢谢!
import com.security.crypto.Configuration.Properties;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.x509.Certificate;
import org.bouncycastle.jce.provider.X509CertificateObject;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.PublicKey;
import java.security.cert.X509Certificate;
/**
* Hello world!
*/
public class App {
public static void main(String[] args) throws Exception {
String df="MIID/TCCAuWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMRQwEgYDVQQDEwtleGFtcGxlLm9yZzELMAkGA1UEBhMCR1IxDzANBgNVBAgTBkF0aGVuczEPMA0GA1UEBxMGQXRoZW5zMQ0wCwYDVQQKEwRUZXN0MQ0wCwYDVQQLEwRUZXN0MB4XDTE2MDkxODE5NDkzMFoXDTE3MDkxODE5NDkzMFowYzEUMBIGA1UEAxMLZXhhbXBsZS5vcmcxCzAJBgNVBAYTAkdSMQ8wDQYDVQQIEwZBdGhlbnMxDzANBgNVBAcTBkF0aGVuczENMAsGA1UEChMEVGVzdDENMAsGA1UECxMEVGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIFsgF86ymuWPEMCZ5Jlj3pLeq2egQ7aiXD3pwhJQemwoC7wSUoViTt3vnNxVVd7HLQZE4igtCI/ZHJhCf5LKoJqxsAfNjq+KK7/9phznX9MroMpluF8LCKDH6otF7rqknLvI72M+oPYkxTYJv02Wb4+lGWn4aYpUh6XmQPDOW6Yoz7RfrY6t0skJMVGqQhg37n/xHrqcc8KmEy0SBpbsRPi6q8Vwsdbd0MiqWt9NdzfBz6kw8WjMSDAf+H4Nwhydgh4sXxSo2zQHobY+QrEr+RLJI++YsqgBeXYeAWbdKb9C6S16VIe8PNi4EqFYtoOzZcMWDl+1xACiFQemor9FRkCAwEAAaOBuzCBuDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIC9DA7BgNVHSUENDAyBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDBAYIKwYBBQUHAwgwEQYJYIZIAYb4QgEBBAQDAgD3MCwGA1UdEQQlMCOGG2h0dHA6Ly9leGFtcGxlLm9yZy93ZWJpZCNtZYcEfwAAATAdBgNVHQ4EFgQUwOcGIZDvBxPH5FJ2ZKo6YoK1oIswDQYJKoZIhvcNAQEFBQADggEBAARO4d3/JNRmTg33HQ2OigiQ3yh/RCd2u9tF39EmU1tpg/nGMnVql+c+M7TnX51vqGJ2oX5nCY/vM2LgUGCqRcuZLRk2u0SzlaI1QlEPLLnsoCes5rU1tVm8xSUOVYp809F8Eiih0A+NZWbPuT83UgiJVtYOvvEWsnlpErkeP4KblS3z532651pTC/RzKO1saRPx4kBI7QAGogEtjbhvMX8099g0mBHvXcVxrIMTUY4sKntMlYQ4vQ4OxBTEXhKwEW1WJh8orXl3E0EkTFhbjkFE9gbqsS3h4ridMcmahoeIwnwckaU5zxgJ2t3ih35FzZXBmfv3qRgFG81Gdi+NH1U=";
X509Certificate cert = loadCertificate(df);
System.out.println(cert.getSigAlgName());//SHA1withRSA
PublicKey key=cert.getPublicKey();
System.out.println(key.getAlgorithm());//java.lang.NullPointerException
}
public static X509Certificate loadCertificate(String asn1)throws IOException, GeneralSecurityException
{
byte []data=Base64.decodeBase64(asn1.getBytes(Properties.CHAR_ENCODING));
ByteArrayInputStream inStream = new ByteArrayInputStream(data);
ASN1InputStream derin = new ASN1InputStream(inStream);
ASN1Primitive certInfo = derin.readObject();
ASN1Sequence seq = ASN1Sequence.getInstance(certInfo); …Run Code Online (Sandbox Code Playgroud) 我有一个Java KeyStore(JKS),需要与BouncyCastle一起阅读。
我已BC在提供商列表顶部添加了提供商:
Security.insertProviderAt(new BouncyCastleProvider(), 1);
Run Code Online (Sandbox Code Playgroud)
如果我以这种方式创建KeyStore:
final KeyStore keystore = KeyStore.getInstance("JKS", "BC");
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
java.security.KeyStoreException:找不到JKS
如果我未指定提供程序,则将使用Sun提供程序创建KeyStore keystore.aliases()并将包含EmptyEnumeration。
正如我在本主题中看到的那样,BouncyCastle可以与JKS合作
如何通过BouncyCastle阅读JKS?
我在项目中包含了2个BC罐:bcpkix-jdk15on-1.47.jar和bcprov-jdk15on-157.jar。
作为代码的第一行,我添加了:
Security.addProvider(new BouncyCastleProvider());
Run Code Online (Sandbox Code Playgroud)
在线发生异常:
JcaPKCS10CertificationRequest csrNew = new JcaPKCS10CertificationRequest(request);
By the way it is imported: import org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequest;
Run Code Online (Sandbox Code Playgroud)
但是我仍然得到:
线程“ AWT-EventQueue-0”中的异常java.lang.NoClassDefFoundError:实现时的org / bouncycastle / jcajce / JcaJceHelper.Util.generateCSR(Util.java:396)
NetBeans定期发现类,但是在我运行项目时发生异常。
有什么办法可以定期包含这两个BouncyCastle罐子吗?
如何导出X509CertificateASN.1格式的?我找到了如何使用扩展名导出到DER和PEM,.cer但是找不到如何导出到ASN.1格式。谁能帮我?
这是我的PEM:
JcaPEMWriter pemWrt = new JcaPEMWriter(new FileWriter(path + ".cer"))
X509Certificate certificate = (X509Certificate) keyStore.getCertificate(loadCertificate);
pemWrt.writeObject(certificate);
pemWrt.flush();
pemWrt.close();
Run Code Online (Sandbox Code Playgroud)
这是我的DER:
X509Certificate certificate = (X509Certificate) keyStore.getCertificate(loadCertificate);
FileOutputStream fileWrite = new FileOutputStream(new File(path + ".cer"));
fileWrite.write(certificate.getEncoded());
fileWrite.flush();
fileWrite.close();
Run Code Online (Sandbox Code Playgroud) 我正在使用itext库验证数字签名的pdf,以下示例可在https://developers.itextpdf.com/examples/security/digital-signatures-white-paper/digital-signatures-chapter-5站点上找到.我在验证数字签名文档时遇到以下错误.任何人都可以帮助解决这个问题.
Exception in thread "main" ExceptionConverter: java.security.NoSuchAlgorithmException: SHA256with1.2.840.10045.4.3.2 Signature not available
at java.security.Signature.getInstance(Signature.java:229)
at com.itextpdf.text.pdf.security.PdfPKCS7.initSignature(PdfPKCS7.java:697)
at com.itextpdf.text.pdf.security.PdfPKCS7.<init>(PdfPKCS7.java:459)
at com.itextpdf.text.pdf.AcroFields.verifySignature(AcroFields.java:2420)
at com.itextpdf.text.pdf.AcroFields.verifySignature(AcroFields.java:2373)
at nic.test.C5_01_SignatureIntegrity.verifySignature(C5_01_SignatureIntegrity.java:24)
at test.ExtractSignInfor.inspectSignature(ExtractSignInfor.java:95)
at test.ExtractSignInfor.inspectSignatures(ExtractSignInfor.java:135)
at test.ExtractSignInfor.main(ExtractSignInfor.java:63)
Run Code Online (Sandbox Code Playgroud) bouncycastle ×10
java ×7
android ×2
cryptography ×2
itext ×2
rsa ×2
.net ×1
asn.1 ×1
keystore ×1
maven ×1
spongycastle ×1