`
bianxb_robin
  • 浏览: 1505 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

使用bouncycastle生成PKCS7后转为Base64格式过程的问题?

阅读更多

大家帮我看一下这个问题:使用bouncycastle的包,对一个字符串进行签名生成P#7,之后进行Base64编码,生成以下数据:
MIAGCSqGSIb3DQEHAqCAMIACAQMxCzAJBgUrDgMCGgUAMIAGAyoFBqCAJIAECTEyMzQ1Njc4OQAA
AAAAAKCAMIICWTCCAcKgAwIBAgIIQbKDub2yJdIwDQYJKoZIhvcNAQEFBQAwJzELMAkGA1UEBhMC
U0UxCzAJBgNVBAoMAkNBMQswCQYDVQQDDAJjYTAeFw0wOTA2MTYxMTE4MjFaFw0xMTA2MTYxMTI4
MjFaMBYxFDASBgNVBAMMC1JB5b2V5YWl5ZGYMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCN
m0S6TVfKQOK7KGU7kKsm1QmzgYObY6Hbz7cWgEynMdQYqeEfzbgfLgS4m3JK0ENTp9dXiOjJpqX2
TD0gaPFgDbeeA4yBzFzpemb78WQUg0ZlcPsQMGDj10J7n3+prB+1QSeHxf7xsOsIJZ8CO9uXzbd0
Tv1/jje7IeP3XHYBrwIDAQABo4GeMIGbMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgWgMDsG
A1UdJQQ0MDIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwQGCCsGAQUFBwMFBggrBgEFBQcD
BzAdBgNVHQ4EFgQUuNm/U3ztrcDfeMry1ujsGkiXluMwHwYDVR0jBBgwFoAUb3kuuU/4Gm7MjfkJ
/Dsqm89rZzcwDQYJKoZIhvcNAQEFBQADgYEAJq2HRr8IK/OVcW50T4t6fVh12RiDXg8YSMDkhDUl
HyOOsCaepWKFPDWX9VC6pmNBNJvU98Kud+X2MOC/qqgtBNe1E0TLChk4912wfsIjws3X4LWLX74T
aVT++IPTPGZzJwDLjwYdE0Hw/OWs3o6cKL4qXUFCypgMqo5inmP+V9gAADGCATIwggEuAgEBMDMw
JzELMAkGA1UEBhMCU0UxCzAJBgNVBAoMAkNBMQswCQYDVQQDDAJjYQIIQbKDub2yJdIwCQYFKw4D
AhoFAKBXMBIGCSqGSIb3DQEJAzEFBgMqBQYwHAYJKoZIhvcNAQkFMQ8XDTA5MDgxOTA5MTE0NFow
IwYJKoZIhvcNAQkEMRYEFPfDvB2AjgRzKt9nmWXMw0ynrjRBMA0GCSqGSIb3DQEBAQUABIGAVlY8
a9t0mz/FHVPRB/fAuGyf7U6xVTuCEe+/to+LkHyABikjOod06AsvFThOFs+sRpsLr4ArQEs+UplK
xkw+yUPbqz4ZvuJbD9G2x6ldnFh//IgpG6/NT41T51HeBo0t/BVlb01vK0gr10sMowMDeOYv8uht
MBgQ/YG1cw6s6TAAAAAAAAA=
再使用sun.security.pkcs.PKCS7对PKCS7进行验证,能够取出P#7中的证书,但是验证签名信息不能通过。
以下是生成PKCS7格式的方法:
     public byte[] createPKCS7(String originalTest) {
           byte[] signedData = null;
           getCert();
           Collection chain = getCertChain();
           ArrayList certList = new ArrayList();
           Certificate cert = getCert509();
           if (cert != null) {
                 certList.add(cert);
           }
           try {
                 CMSProcessable msg = new CMSProcessableByteArray(originalTest
                             .getBytes());
                 CertStore certs = CertStore.getInstance("Collection",
                             new CollectionCertStoreParameters(certList), "BC");
                 CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
                 gen.addSigner(getPk(), (X509Certificate) getCert509(),
                             CMSSignedGenerator.DIGEST_SHA1);
                 gen.addCertificatesAndCRLs(certs);
                 CMSSignedData s = null;
                 Provider provider = new BouncyCastleProvider();
                 Security.addProvider(provider);
                 s = gen.generate(msg,true,provider);//,
                 signedData = s.getEncoded();
           } catch (Exception e) {
                 e.printStackTrace();
           }
           return signedData;
     }
以下是验证的方法:
     private boolean isVerified(byte[] sig, byte[] content) {
           PKCS7 pkcs7;
           X509Certificate[] x509s;
           X509Certificate x509;
           SignerInfo[] ss;
           SignerInfo s;
           Signature sign;
           try {
                 pkcs7 = new PKCS7(sig);
                 x509s = pkcs7.getCertificates();
                 x509 = x509s[0];
                 
                 System.out.println(pkcs7.getContentInfo().getContent().getAsString());
                 ss = pkcs7.getSignerInfos();
                 s = ss[0];

                 sign = Signature.getInstance("SHA1/RSA", "BC");
                 sign.initVerify(x509);
                 sign.update(toUnicode(content));//toUnicode(content)
                 byte[] aa = s.getEncryptedDigest();
                 System.out.println(new String(aa));
                 boolean verified = sign.verify(s.getEncryptedDigest());

                 ///////////////////////////////////////////////////////
                 pkcs7 = null;
                 sign = null;
                 s = null;
                 ss = null;
                 x509 = null;
                 x509s = null;
                 return verified;
           } catch (SignatureException sigex) {
                 //System.out.println("VerifyP7sTool.isVerified22222222");
                 sigex.printStackTrace();
                 // System.out.println("sigexcept " + sigex.toString());
                 return false;
           } catch (Exception secex) {
                 //System.out.println("VerifyP7sTool.isVerified3333333333");
                 secex.printStackTrace();
                 // System.out.println("other exception " + secex.toString());
                 return false;
           }
     }
不知道是不是生成的P#7的base64格式有问题,
以下是用CAPICOM生成的
                 "MIIDbAYJKoZIhvcNAQcCoIIDXTCCA1kCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3"
                       + "DQEHAaCCAl0wggJZMIIBwqADAgECAghBsoO5vbIl0jANBgkqhkiG9w0BAQUFADAn"
                       + "MQswCQYDVQQGEwJTRTELMAkGA1UECgwCQ0ExCzAJBgNVBAMMAmNhMB4XDTA5MDYx"
                       + "NjExMTgyMVoXDTExMDYxNjExMjgyMVowFjEUMBIGA1UEAwwLUkHlvZXlhaXlkZgw"
                       + "gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAI2bRLpNV8pA4rsoZTuQqybVCbOB"
                       + "g5tjodvPtxaATKcx1Bip4R/NuB8uBLibckrQQ1On11eI6MmmpfZMPSBo8WANt54D"
                       + "jIHMXOl6ZvvxZBSDRmVw+xAwYOPXQnuff6msH7VBJ4fF/vGw6wglnwI725fNt3RO"
                       + "/X+ON7sh4/dcdgGvAgMBAAGjgZ4wgZswDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8E"
                       + "BAMCBaAwOwYDVR0lBDQwMgYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDBAYI"
                       + "KwYBBQUHAwUGCCsGAQUFBwMHMB0GA1UdDgQWBBS42b9TfO2twN94yvLW6OwaSJeW"
                       + "4zAfBgNVHSMEGDAWgBRveS65T/gabsyN+Qn8Oyqbz2tnNzANBgkqhkiG9w0BAQUF"
                       + "AAOBgQAmrYdGvwgr85VxbnRPi3p9WHXZGINeDxhIwOSENSUfI46wJp6lYoU8NZf1"
                       + "ULqmY0E0m9T3wq535fYw4L+qqC0E17UTRMsKGTj3XbB+wiPCzdfgtYtfvhNpVP74"
                       + "g9M8ZnMnAMuPBh0TQfD85azejpwovipdQULKmAyqjmKeY/5X2DGB2DCB1QIBATAz"
                       + "MCcxCzAJBgNVBAYTAlNFMQswCQYDVQQKDAJDQTELMAkGA1UEAwwCY2ECCEGyg7m9"
                       + "siXSMAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEgYBDgHuulzpzyUF1+YEBOsvV"
                       + "M6LIsTgm2nv5ofzWk2tduZFWmMejfpafZpFlEpOn+SA/bu08CrJWPBDk+BwFfMzv"
                       + "8IxQw6BlPL70IH08n45ZbzMaya56zc9mXfDPoHFiOHNZVJE7ikZ01XzpvkCKj6IA"
                       + "XgyYSI+H5R2DhsVratOCxw== ";
谢谢~~

分享到:
评论

相关推荐

    C# BouncyCastle实现带原文数据PKCS#7 签名、验签

    在C#中使用BouncyCastle库实现PKCS#7签名和验签的过程,可以分为以下几个步骤: 1. **导入BouncyCastle库**:首先需要在C#项目中引用BouncyCastle库。这可以通过NuGet包管理器完成,安装`BCryptNet`和`BouncyCastle...

    C# BouncyCastle实现带原文数据PKCS#7 签名

    本文将详细讲解如何使用C#语言和BouncyCastle库来实现带原文数据的PKCS#7签名。 PKCS#7(Public-Key Cryptography Standards #7)是由RSA Security提出的一种标准,它定义了证书、证书撤销列表(CRL)的格式以及...

    bouncycastle jar包

    Bouncy Castle实现了PKCS#7(用于数据封装和签名)、PKCS#12(用于存储私钥和证书)、PKCS#5(用于密码化)和PKCS#11(用于硬件加密设备接口)等标准。 **OpenSSL兼容** Bouncy Castle还提供了一个名为BCrypt的...

    org.bouncycastle完整资源包

    它不仅包含了各种经典的加密算法,如AES、DES、RSA、DSA等,还支持PKCS#7、PKCS#12、PEM、X.509证书、OCSP等标准格式,使得开发者能够轻松地在应用程序中集成复杂的密码学操作。 1. **加密算法支持**:`org.bouncy...

    BouncyCastle依赖.zip

    使用BouncyCastle时,需要注意兼容性和版本问题,因为不同版本的BouncyCastle可能对某些算法的支持程度不同。在Android中,由于安全限制,可能需要在应用的清单文件中声明使用Vetoed API,特别是对于低于Android API...

    org.bouncycastle 加密算法包 最新1.69版

    Bouncy Castle 包含了一个全面的 ASN.1 编码/解码器,对于处理 X.509 证书和 PKCS#7 格式的文件尤其有用。 8. **PKCS(Public Key Cryptography Standards)支持**: Bouncy Castle 实现了 PKCS#1、PKCS#5、PKCS#7...

    开源加密库Bouncy Castle Crypto APIs (RSA加密)

    1. **生成密钥对**:在Java或C#中使用Bouncy Castle生成RSA密钥对。 2. **数据加密**:使用公钥对原始数据进行加密。 3. **数据传输**:将加密后的数据发送给接收方。 4. **数据解密**:接收方使用私钥对加密数据...

    BouncyCastle.Crypto.dll 版本1.8.1

    3. **PKCS#7 和 CMS 支持**:BouncyCastle 提供了对公钥加密标准PKCS#7和内容加密标准CMS的支持,这在处理数字签名、证书和加密邮件时非常有用。 4. **OpenSSL 兼容性**:BouncyCastle 还可以与OpenSSL API互操作,...

    BouncyCastle.Crypto.dll

    BouncyCastle库是Java和.NET平台上广泛使用的加密库之一,而"BouncyCastle.Crypto.dll"正是.NET环境中实现该库的核心组件。本文将深入探讨BouncyCastle.Crypto.dll的功能、特点以及其在.NET开发中的应用。 Bouncy...

    BouncyCastle.Crypto.dll 版本1.8.6 C#语言

    它还实现了PKCS#10证书请求生成,以及PKCS#12个人证书存储格式。 3. **TLS/SSL支持**:对于需要在客户端和服务器之间建立安全连接的应用程序,BouncyCastle库提供了SSL/TLS协议的实现,这使得开发者可以自定义安全...

    BouncyCastle.Crypto.dllC#下的BouncyCastle

    BouncyCastle是JAVA专属库,但出来了C#的库。这个非常实用。仅仅一个dll文件

    Bouncy Castle 1.64 API及制作工具

    Bouncy Castle 包含了密钥生成、导入和导出的工具,支持 PKCS#8 和 PKCS#12 格式。此外,它还支持密钥对的加密和解密,以保护密钥的安全存储。 6. **CMS(Cryptographic Message Syntax)** CMS 是一个标准,用于...

    bouncycastle1.59 帮助文档(包含html源文件制作工具)

    总的来说,这份“BouncyCastle1.59帮助文档”是开发者学习和使用BouncyCastle的重要参考资料,结合CHM制作工具,不仅可以方便地查阅和理解库的功能,还能定制自己的帮助文档,提升开发效率。无论你是加密领域的初学...

    齐全的Bouncycastle--jar文件

    4. **Util**:Util工具类提供了各种辅助功能,如随机数生成、编码/解码(Base64、Hex)、证书链验证等。这些工具对于简化加密操作和处理复杂任务非常有用。 5. **TLS**:TLS是互联网上保障通信安全的协议,常用于...

    Python兼容Java bouncycastle包的国密sm2加解密方法

    5. 如果你需要与Java bouncycastle保持兼容,确保在编码和解码时使用相同的格式,例如Base64编码: ```python import base64 # 加密前将明文转换为Base64 plain_text_base64 = base64.b64encode(plain_text.encode...

Global site tag (gtag.js) - Google Analytics