java与openssl签名核验的问题

时间:2021-11-02 13:13:14
我用JAVA加密和使用openssl加密的结果是一样的,JAVA中用的是
Cipher cipher = Cipher.getInstance("RSA/NONE/NoPadding");
即RSA算法,没有模型和补位。openssl中也用的一样,所以结果一样,但用openssl签名的数据在用JAVA核验的时候就通不过。
openssl签名的时候没有补位,只是做了SHA1摘要,然后进行的签名。

那JAVA中相应的应该怎样来核验呢?我用
Signature rsa = Signature.getInstance("SHA1withRSA"); 
好像核验不通过,看doc的说明是:

SHA1withRSA: The signature algorithm with SHA-1 and the RSA encryption algorithm as defined in the OSI Interoperability Workshop, using the padding conventions described in PKCS #1. 

它这里有默认的padding,但我想像加密一样没有模式也没有填充应该怎么写呢?而且SHA1withRSA是否自动进行了SHA1摘要呢?

5 个解决方案

#1


帮忙顶一下,让了解的人来解答.

#2


没有人熟悉签名这一块么?

#3


你先使用JAVA和openssl用相同的算法签名同一个消息,然后看看结果是不是一样的,你会看到两个结果是不一样的.

#4


JAVA中有一些默认的东西,比如指定RSA算法,它默认用的pkcs#1标准来padding的好像,但openssl没有默认加一些东西,
但我不知道JAVA中如何设置什么都不加而且也不知道它的签名是否会自动做摘要,比如指定RSAwithMD5

#5


openssl的签名没试过,但windows crypt api产生的签名用java验证是要大小端倒置的,它们一个是大端编码,一个是小端编码。

#1


帮忙顶一下,让了解的人来解答.

#2


没有人熟悉签名这一块么?

#3


你先使用JAVA和openssl用相同的算法签名同一个消息,然后看看结果是不是一样的,你会看到两个结果是不一样的.

#4


JAVA中有一些默认的东西,比如指定RSA算法,它默认用的pkcs#1标准来padding的好像,但openssl没有默认加一些东西,
但我不知道JAVA中如何设置什么都不加而且也不知道它的签名是否会自动做摘要,比如指定RSAwithMD5

#5


openssl的签名没试过,但windows crypt api产生的签名用java验证是要大小端倒置的,它们一个是大端编码,一个是小端编码。