签名时“此签名算法的密钥太短”

帕维尔·弗拉索夫(Pavel Vlasov)

我正在InvalidKeyException尝试初始化一个Signature对象:

java.security.InvalidKeyException: Key is too short for this signature algorithm

代码:

String pkcs8 = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEA34N+ujANvgJ0vc696v2T/L3QUxwNf5VEf9sO/NESOBx9ZNhTHKtmY3vdmW1LVmT07vxVlaMgRhxG90h/HKCD7wIDAQABAkB2kN2PzN/tVIYzDdGnLz7qipJRFAeBD2CX5k9sA0gD5PLtpV0IVxYvSw7rUAOR/GywklF+QWKYwfCqkhMkEJMRAiEA+8fQcNEajDWB/R2VgPPWA8indGQdZT8m9lvo0xYD97kCIQDjQmkd82+UPlRB+g7GwTJw9GIiRvdps3yIKZlCKfHc5wIhAJCDb7BRVNuFGscdY+JQEla5pOO5UuX6CXL97fS6fiyBAiBRFKKYUwAeLda161dWRhuO/UH95L/k8Gqf0eeiGYD3RQIgEiAhiX1quSuBL7LrLGISGyJVy0dw+IXosqFHYeutmEI='
KeySpec keySpec = new PKCS8EncodedKeySpec(pkcs8.decodeBase64())
KeyFactory keyFactory = KeyFactory.getInstance("RSA", "SunRsaSign")
PrivateKey pk = keyFactory.generatePrivate(keySpec)
Signature signature = Signature.getInstance("SHA512withRSA", "SunRsaSign")
signature.initSign(pk) // <--- InvalidKeyException

这就是我获得私钥的方式pkcs8

# generate a private key just for this example
openssl genrsa 512 > mykey.pem
# convert it into pkcs8 format to be able to read it from Java later
openssl pkcs8 -topk8 -inform pem -in mykey.pem -outform pem -nocrypt -out file.pkcs8

这是标准的私钥外观:

Sun RSA private CRT key, 512 bits
  modulus:          11706359850928035656926954612512379852454997399434114135854653766733637189933721115314465909375387122765789791657314272666480346477870633114913813167113199
  public exponent:  65537
  private exponent: 6209799048133316441293705496192881663344339603450371209133573984169170039947484349841188666943972061768383840284881642579217732240489331444594222111429393
  prime p:          113883566165066111166981826386356612269934395331161452768365784963361173403577
  prime q:          102792354025518497728065227780488381725246951885773034739853555051227644026087
  prime exponent p: 65365278008836639419826790688453702902877034572485301544697611535190715149441
  prime exponent q: 36673799866101187327427577642604625501620828371654868216232903920042186438469
  crt coefficient:  8198401844921780663468999895368137692410993828212557924743840907863587133506

如何使签名生效?

JDK 1.6

安德烈·阿塔平(Andrey Atapin)

这是一个已知的错误说明说:

签名算法(例如“ SHA384withRSA”和“ SHA512withRSA”)要求哈希长度应小于密钥大小。如果RSA密钥大小为512位,它将不能与SHA384和SHA512一起使用。

尽管据报道它是针对JDK 7的,但我怀疑您也可能偶然发现此错误。尝试生成更大的密钥(1024或更大)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

签名时“此签名算法的密钥太短”

来自分类Dev

无法恢复密钥 - 生成签名 APK 时

来自分类Dev

reprepro:密钥签名使用弱摘要算法(SHA1)

来自分类Dev

带有两个密钥的数字签名算法

来自分类Dev

UseJwtBearerAuthentication签名密钥

来自分类Dev

自签名密钥证书

来自分类Dev

通过mokutil签名密钥

来自分类Dev

UseJwtBearerAuthentication签名密钥

来自分类Dev

如何修复签名密钥?

来自分类Dev

用git签名时没有秘密密钥

来自分类Dev

验证JWT时如何处理每个用户的签名密钥?

来自分类Dev

Gpg4win 安装程序签名验证:如何解决“警告:此密钥未通过可信签名认证!”

来自分类Dev

ubuntu 16.04:通过密钥获取签名使用弱摘要算法(sha1)

来自分类Dev

导入存储库签名密钥

来自分类Dev

Azure AD签名密钥过渡

来自分类Dev

用旧的过期密钥签名新密钥

来自分类Dev

导入签名您的密钥的公共密钥

来自分类Dev

使用信封式签名时放置签名

来自分类Dev

在iPhone上调试时,“没有iOS代码签名密钥与指定的配置文件匹配”

来自分类Dev

为什么在我没有配置签名时,源代码树会寻找gpg密钥?

来自分类Dev

收到IDX10501的错误消息:签名验证失败。使用Azure AD时无法匹配密钥

来自分类Dev

在Windows上签名git commit时出现“无秘密密钥”错误

来自分类Dev

使用BouncyCastle和外部Azure KeyVault(HSM)密钥创建证书时,签名无效

来自分类Dev

当我们创建密钥并点击“ build”时,程序集dll是否已签名?

来自分类Dev

尝试安装存储库签名密钥时无法写入`-'(破损管道)

来自分类Dev

尝试安装存储库签名密钥时,wget会抛出“缺少URL”

来自分类Dev

尝试对Xml签名时“在指定状态下无法有效使用密钥”

来自分类Dev

我已经拥有签名密钥时,将ionic应用发布到android

来自分类Dev

jwt:为什么在验证JWT令牌时不需要签名算法?

Related 相关文章

  1. 1

    签名时“此签名算法的密钥太短”

  2. 2

    无法恢复密钥 - 生成签名 APK 时

  3. 3

    reprepro:密钥签名使用弱摘要算法(SHA1)

  4. 4

    带有两个密钥的数字签名算法

  5. 5

    UseJwtBearerAuthentication签名密钥

  6. 6

    自签名密钥证书

  7. 7

    通过mokutil签名密钥

  8. 8

    UseJwtBearerAuthentication签名密钥

  9. 9

    如何修复签名密钥?

  10. 10

    用git签名时没有秘密密钥

  11. 11

    验证JWT时如何处理每个用户的签名密钥?

  12. 12

    Gpg4win 安装程序签名验证:如何解决“警告:此密钥未通过可信签名认证!”

  13. 13

    ubuntu 16.04:通过密钥获取签名使用弱摘要算法(sha1)

  14. 14

    导入存储库签名密钥

  15. 15

    Azure AD签名密钥过渡

  16. 16

    用旧的过期密钥签名新密钥

  17. 17

    导入签名您的密钥的公共密钥

  18. 18

    使用信封式签名时放置签名

  19. 19

    在iPhone上调试时,“没有iOS代码签名密钥与指定的配置文件匹配”

  20. 20

    为什么在我没有配置签名时,源代码树会寻找gpg密钥?

  21. 21

    收到IDX10501的错误消息:签名验证失败。使用Azure AD时无法匹配密钥

  22. 22

    在Windows上签名git commit时出现“无秘密密钥”错误

  23. 23

    使用BouncyCastle和外部Azure KeyVault(HSM)密钥创建证书时,签名无效

  24. 24

    当我们创建密钥并点击“ build”时,程序集dll是否已签名?

  25. 25

    尝试安装存储库签名密钥时无法写入`-'(破损管道)

  26. 26

    尝试安装存储库签名密钥时,wget会抛出“缺少URL”

  27. 27

    尝试对Xml签名时“在指定状态下无法有效使用密钥”

  28. 28

    我已经拥有签名密钥时,将ionic应用发布到android

  29. 29

    jwt:为什么在验证JWT令牌时不需要签名算法?

热门标签

归档