Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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_Security_Digital Signature_Jce_Elliptic Curve - Fatal编程技术网

Java 使用椭圆曲线密码验证签名

Java 使用椭圆曲线密码验证签名,java,security,digital-signature,jce,elliptic-curve,Java,Security,Digital Signature,Jce,Elliptic Curve,我需要验证包含多个值的消息的签名。我仅有的参数是签名、公钥和值本身。用于创建签名的算法是192位的椭圆曲线加密。我试图在网上找到代码示例,但没有找到任何与此案例相关的内容 有没有人使用java验证过这个算法?您能提供代码或示例链接吗 谢谢你的帮助 您可能可以使用该库 请参见您可能可以使用该库 请参见您的信息有点不足 有几种使用椭圆曲线的签名方案,但最广泛(到目前为止)的是椭圆曲线。然后,您必须担心以下几点: 签名对一系列位进行操作。每个数据位都必须正确。这里有“值”,所以必须将这些值编码为一个

我需要验证包含多个值的消息的签名。我仅有的参数是签名、公钥和值本身。用于创建签名的算法是192位的椭圆曲线加密。我试图在网上找到代码示例,但没有找到任何与此案例相关的内容

有没有人使用java验证过这个算法?您能提供代码或示例链接吗

谢谢你的帮助

您可能可以使用该库

请参见

您可能可以使用该库


请参见

您的信息有点不足

有几种使用椭圆曲线的签名方案,但最广泛(到目前为止)的是椭圆曲线。然后,您必须担心以下几点:

  • 签名对一系列位进行操作。每个数据位都必须正确。这里有“值”,所以必须将这些值编码为一个位(或字节)序列。要验证签名,必须使用与生成签名所用编码相同的编码

  • ECDSA首先用一个字符串散列输入数据。同样,您必须使用与生成签名所用的相同的签名。作为一个粗略的猜测,我想说散列函数可能是

  • ECDSA在一个安全的环境中运行。曲线大小不足以定义曲线:有许多192位曲线。但是,由于定义自己的曲线很困难,大多数人在中定义的15条曲线中使用一条曲线。这15条曲线中的一条具有“192位大小”(称为“P-192”),因此签名很可能使用该曲线

  • ECDSA公钥是曲线点的编码。曲线点名义上是一对整数(X,Y)(这些是点的“坐标”)。这些整数来自曲线所在的基本字段;对于P-192曲线,坐标是192位整数。这种公钥的“正常”编码是一个49字节的字符串:第一个字节是0x02,然后是X(24字节)的大端无符号编码,然后是Y(24字节)的无符号编码。其他编码是可能的

  • ECDSA签名形式上由两个整数值组成,通常称为r和s(也是192位整数)。同样,您的签名可能是一个字节序列,它是两个整数的编码。有两种常见的编码,一种是两个值的原始大端无符号编码(因此是48字节签名),另一种使用ASN.1(用于长度为53或54字节左右的签名)


正如@Ashkan所建议的,使用是一个好主意。但是,正如你所看到的,关于你的情况有很多假设要做。如果您想彻底了解正在发生的事情,请购买(ECDSA标准)的副本。请注意,数学内容相当繁重。

您在这方面的信息有点不足

有几种使用椭圆曲线的签名方案,但最广泛(到目前为止)的是椭圆曲线。然后,您必须担心以下几点:

  • 签名对一系列位进行操作。每个数据位都必须正确。这里有“值”,所以必须将这些值编码为一个位(或字节)序列。要验证签名,必须使用与生成签名所用编码相同的编码

  • ECDSA首先用一个字符串散列输入数据。同样,您必须使用与生成签名所用的相同的签名。作为一个粗略的猜测,我想说散列函数可能是

  • ECDSA在一个安全的环境中运行。曲线大小不足以定义曲线:有许多192位曲线。但是,由于定义自己的曲线很困难,大多数人在中定义的15条曲线中使用一条曲线。这15条曲线中的一条具有“192位大小”(称为“P-192”),因此签名很可能使用该曲线

  • ECDSA公钥是曲线点的编码。曲线点名义上是一对整数(X,Y)(这些是点的“坐标”)。这些整数来自曲线所在的基本字段;对于P-192曲线,坐标是192位整数。这种公钥的“正常”编码是一个49字节的字符串:第一个字节是0x02,然后是X(24字节)的大端无符号编码,然后是Y(24字节)的无符号编码。其他编码是可能的

  • ECDSA签名形式上由两个整数值组成,通常称为r和s(也是192位整数)。同样,您的签名可能是一个字节序列,它是两个整数的编码。有两种常见的编码,一种是两个值的原始大端无符号编码(因此是48字节签名),另一种使用ASN.1(用于长度为53或54字节左右的签名)


正如@Ashkan所建议的,使用是一个好主意。但是,正如你所看到的,关于你的情况有很多假设要做。如果您想彻底了解正在发生的事情,请购买(ECDSA标准)的副本。请注意,数学内容相当繁重。

谢谢您的回答。不幸的是,到bouncycastle wiki的链接不起作用,我总是收到一个服务器错误。@Skiontke是的,它目前对我也不起作用,这就是为什么我无法向您发送更详细的回复。它可能暂时关闭…@SKiontke javadocs这里:检查以EC开头的类…谢谢你的回答。不幸的是,到bouncycastle wiki的链接不起作用,我总是收到一个服务器错误。@Skiontke是的,它目前对我也不起作用,这就是为什么我无法向您发送更详细的回复。它可能暂时关闭…@SKiontke javadocs此处:检查以EC开头的类。。。