Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从签名内容java中读取原始数据_Java_X509 - Fatal编程技术网

从签名内容java中读取原始数据

从签名内容java中读取原始数据,java,x509,Java,X509,我想从签名内容中提取原始数据 在以下代码中,签名的数据是“CMSSignedData signed” 我从StackOverflow中找到了几个类似的答案,但所有答案都不可能 说明如何从签名内容中提取原始数据 问候 package chapter9; import java.security.KeyStore; import java.security.PrivateKey; import java.security.cert.*; import java.util.Arrays; impo

我想从签名内容中提取原始数据

在以下代码中,签名的数据是“CMSSignedData signed”

我从StackOverflow中找到了几个类似的答案,但所有答案都不可能 说明如何从签名内容中提取原始数据

问候

package chapter9;

import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.*;
import java.util.Arrays;

import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.cms.CMSProcessable;
import org.bouncycastle.cms.CMSProcessableByteArray;
import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.cms.CMSSignedDataGenerator;

/**
 * Example of generating a detached signature.
 */
public class SignedDataExample
    extends SignedDataProcessor
{

    public static void main(String[] args)
        throws Exception
    {
        KeyStore        credentials = Utils.createCredentials();
        PrivateKey      key = (PrivateKey)credentials.getKey(Utils.END_ENTITY_ALIAS, Utils.KEY_PASSWD);
    Certificate[]   chain = credentials.getCertificateChain(Utils.END_ENTITY_ALIAS);
    CertStore       certsAndCRLs = CertStore.getInstance("Collection",
                        new CollectionCertStoreParameters(Arrays.asList(chain)), "BC");
    X509Certificate cert = (X509Certificate)chain[0];

    // set up the generator
    CMSSignedDataGenerator gen = new CMSSignedDataGenerator();

    gen.addSigner(key, cert, CMSSignedDataGenerator.DIGEST_SHA256);
    gen.addCertificatesAndCRLs(certsAndCRLs);

    // create the signed-data object

    CMSProcessable  data = new CMSProcessableByteArray("Hello World!".getBytes());
    CMSSignedData signed = gen.generate(data, "BC");

    // recreate
    signed = new CMSSignedData(data, signed.getEncoded());

    //extract public key
    CertStore cs = signed.getCertificatesAndCRLs("Collection", "BC");



    //signed.signedContent
    //signed.g
    CMSProcessable S = signed.getSignedContent();
    String aaa = S.getContent().toString();
    //byte[] K = Base64.decodeBase64((S.getContent()).toString());



    //
    //String K = Base64.decodeBase64(S.getContent());
    //BASE64Decoder.decoder.decodeBuffer()

    //
    //byte[] array = asString.getBytes("UTF8");
    //String s = new String(array, "UTF8");

    // verification step
    X509Certificate rootCert = (X509Certificate)credentials.getCertificate(Utils.ROOT_ALIAS);

    if (isValid(signed, rootCert))
    {
        System.out.println("verification succeeded");
        //System.out.println(K);
        //String asString = new String((byte[])data.getContent());
        //String asString1 = new String(cs.toString());
        //System.out.println(asString);
        //System.out.println(asString1);
        //System.out.println(aaa);
    }
    else
    {
        System.out.println("verification failed");
    }
}

}您需要使用
字符串aaa=新字符串
而不是
字符串aaa=S.getContent().toString()
虽然您也应该指定编码,例如
stringaaa=newstring(s,Charset.forName(“UTF-8”)。请对您的
toBytes()
方法执行相同操作。

使用
新字符串((byte[])S.getContent()
获取原始内容

aaa打印[B@fa7e74您是否尝试过:?因为pkcs-7可以创建分离的签名,这意味着签名中不包含原始数据..那么新字符串(aaa)如何?@user1349407“[B@fa7e74"看起来像字节数组的toString输出。您是否尝试打印/记录S.getContent()的类?像这样将toString应用于该对象可能会丢弃任何内容,例如,如果该对象是数组。如果该类被证明是字节[],则,打印各个字节以检查它们是否表示您期望的数据。@MagnoC这不是一个非常有用的注释…但我会将其添加到错误错误消息列表中。抱歉。我会解释:您说过我们需要使用
String aaa=新字符串;
但是
s
(小写)来自何处?请澄清您的答案。@MagnoC我想我自动将大写字母S转换为小写字母S,正如Java编码标准所示。是的,但我不能将
CMSProcessable
(S)转换为
String