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
但我不知道JAVA中如何设置什么都不加而且也不知道它的签名是否会自动做摘要,比如指定RSAwithMD5
#5
openssl的签名没试过,但windows crypt api产生的签名用java验证是要大小端倒置的,它们一个是大端编码,一个是小端编码。
#1
帮忙顶一下,让了解的人来解答.
#2
没有人熟悉签名这一块么?
#3
你先使用JAVA和openssl用相同的算法签名同一个消息,然后看看结果是不是一样的,你会看到两个结果是不一样的.
#4
JAVA中有一些默认的东西,比如指定RSA算法,它默认用的pkcs#1标准来padding的好像,但openssl没有默认加一些东西,
但我不知道JAVA中如何设置什么都不加而且也不知道它的签名是否会自动做摘要,比如指定RSAwithMD5
但我不知道JAVA中如何设置什么都不加而且也不知道它的签名是否会自动做摘要,比如指定RSAwithMD5
#5
openssl的签名没试过,但windows crypt api产生的签名用java验证是要大小端倒置的,它们一个是大端编码,一个是小端编码。