Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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_Digital Signature - Fatal编程技术网

Java 无符号数据和有符号数据

Java 无符号数据和有符号数据,java,digital-signature,Java,Digital Signature,我必须签名并将数据发送到服务器。我使用Bouncy castle生成了CMSSignedData对象。我对密码学是新手,据我所知,我必须将已签名的数据以及已签名的数据发送到服务器。我必须把它作为一个文件发送。我可以获得使用签名的数据 CMSProcessableByteArray cpby = (CMSProcessableByteArray) sigData.getSignedContent() ; byte[] data = (byte[])cpby.getContent(); 这里sig

我必须签名并将数据发送到服务器。我使用Bouncy castle生成了CMSSignedData对象。我对密码学是新手,据我所知,我必须将已签名的数据以及已签名的数据发送到服务器。我必须把它作为一个文件发送。我可以获得使用签名的数据

CMSProcessableByteArray cpby = (CMSProcessableByteArray) sigData.getSignedContent() ;
byte[] data = (byte[])cpby.getContent();
这里sigData是CMSSignedData对象

我想代码

byte[] signed = sigData.getEncoded() 
获取字节数组中的有符号数据

问题是创建包含数据和签名数据的文件的一般方法是什么。我是否只添加两字节数组?签名为[]的数组是否也包含数据?如果是,如何从签名为[]的数组中检索数据。我这样问是因为我需要遵循类似的过程来检索数据和签名数据,以便从服务器验证响应。

您使用的“签名”类型基于(以前称为“PKCS#7”)。这是一种标准格式,用于用加密或签名或两者封装某些数据;这是递归的,因此可以嵌套多个级别

CMS对象是由这段ASN定义的
ContentInfo
结构。1:

当对象描述签名时,
contentType
字段包含“已签名数据”的标识符,
content
是定义为以下内容的结构:

实际的加密签名位于
signerInfos
对象中,而
encapContentInfo
可能包含已签名的数据。这是重要的一点。
封装的contentinfo
结构是:

请参阅“
可选”
”?这意味着CMS对象可能包含也可能不包含已签名的数据

当CMS对象包含已签名的数据时,您将得到一个单个对象,编码为字节数组(这就是使用ASN的要点。1:所有这些对象都可以随意编码和解码)。另一方面,如果CMS对象不包含已签名的数据,则这是分离的签名。当然,如果没有待签名数据的副本,就无法对签名进行验证,因此,如果签名是“分离的”,那么必须有其他方式将数据本身传递给验证者

分离签名在受密码保护的电子邮件中非常流行(S/MIME可以被描述为“电子邮件中的CMS对象”),因为分离签名随后作为电子邮件附加文件发送,电子邮件文本内容保持不变:因此,电子邮件内容仍然可以由软件读取,该软件完全不知道S/MIME可能是什么,并且无法从带有数据对象的CMS中提取数据

在您的情况下,您必须生成验证者完成其工作所需的任何内容。这应该已经在您当前实施的协议中定义好了。协议可能会告诉您,要签名的数据已经通过另一个通道可供验证器使用;或者它可能会告诉您必须使用未分离的CMS签名对象

如果没有明确定义的协议,而您正在按自己的方式制定协议,那么这将导致灾难。我强烈希望情况并非如此。密码学很难使用,主要是因为无法测试您的操作是否正确。

您使用的“签名”类型基于(以前称为“PKCS#7”)。这是一种标准格式,用于用加密或签名或两者封装某些数据;这是递归的,因此可以嵌套多个级别

CMS对象是由这段ASN定义的
ContentInfo
结构。1:

当对象描述签名时,
contentType
字段包含“已签名数据”的标识符,
content
是定义为以下内容的结构:

实际的加密签名位于
signerInfos
对象中,而
encapContentInfo
可能包含已签名的数据。这是重要的一点。
封装的contentinfo
结构是:

请参阅“
可选”
”?这意味着CMS对象可能包含也可能不包含已签名的数据

当CMS对象包含已签名的数据时,您将得到一个单个对象,编码为字节数组(这就是使用ASN的要点。1:所有这些对象都可以随意编码和解码)。另一方面,如果CMS对象不包含已签名的数据,则这是分离的签名。当然,如果没有待签名数据的副本,就无法对签名进行验证,因此,如果签名是“分离的”,那么必须有其他方式将数据本身传递给验证者

分离签名在受密码保护的电子邮件中非常流行(S/MIME可以被描述为“电子邮件中的CMS对象”),因为分离签名随后作为电子邮件附加文件发送,电子邮件文本内容保持不变:因此,电子邮件内容仍然可以由软件读取,该软件完全不知道S/MIME可能是什么,并且无法从带有数据对象的CMS中提取数据

在您的情况下,您必须生成验证者完成其工作所需的任何内容。这应该已经在您当前实施的协议中定义好了。协议可能会告诉您,要签名的数据已经通过另一个通道可供验证器使用;或者它可能会告诉您必须使用未分离的CMS签名对象

如果没有明确定义的协议,而您正在按自己的方式制定协议,那么这将导致灾难。我强烈希望情况并非如此。密码学很难使用,主要是因为无法测试您是否正确使用了它
  ContentInfo ::= SEQUENCE {
    contentType ContentType,
    content [0] EXPLICIT ANY DEFINED BY contentType }

  ContentType ::= OBJECT IDENTIFIER
  SignedData ::= SEQUENCE {
    version CMSVersion,
    digestAlgorithms DigestAlgorithmIdentifiers,
    encapContentInfo EncapsulatedContentInfo,
    certificates [0] IMPLICIT CertificateSet OPTIONAL,
    crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
    signerInfos SignerInfos }
  EncapsulatedContentInfo ::= SEQUENCE {
    eContentType ContentType,
    eContent [0] EXPLICIT OCTET STRING OPTIONAL }