Closed. This question needs debugging details。它当前不接受答案。












想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。

5年前关闭。





我的应用程序使用私钥通过密钥文件连接到SFTP。

当我测试代码并引用存储在计算机上的私钥文件时,我可以成功连接。

密钥文件的内容具有以下格式。


----- BEGIN RSA私钥----- MIICXAIBAAKBgQCqGKukO1De7zhZj6 + H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ / DgYSF6vUp wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1 / 3J + skZ6UtW + 5u09lHNsj6tQ5 1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56 + qGyN8M0RVyaRAXz ++ xTqHBLh 3tx4VgMtrQ + WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2 pIIVOFMDG + KESnAFV7l2c + cnzRMW0 + b6f8mR1CJzZuxVLL6Q02fvLi55 / mbSYxECQQDeAw6fiIQX GukBI4eMZZt4nscy2o12KyYner3VpoeE + Np2q + Z3pvAMd / aNzQ / W9WaI + NRfcxUJrmfPwIGm63il AkEAxCL5HQb2bQr4ByorcMWm / hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3 / 9s5p + sqGxOlF L0NDt4SkosjgGwJAFklyR1uZ / wPJjj611cdBcztlPdqoxssQGnh85BzCj / u3WqBpE2vjvyyvyI5k X6zk7S0ljKtt2jny2 + 00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu / fhrT8ebHkTz2epl U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ 37sJ5QsW + sJyoNde3xH8vdXhzU7eT82D6X / scw9RZz + / 6rCJ4p0 = ----- END RSA私钥-----


我需要将私钥存储在数据库表中。当我尝试检索私钥时,出现以下异常:


javax.crypto.IllegalBlockSizeException:在com.sun.crypto.provider.SunJCE_f.b(DashoA13)的com.sun.crypto.provider.SunJCE_f.b(DashoA13 * ..)处使用填充密码解密时,输入长度必须为8的倍数。 * ..)在com.sun.crypto.provider.DESedeCipher.engineDoFinal(DashoA13 * ..)在javax.crypto.Cipher.doFinal(DashoA13 * ..)


我想学习如何将私钥存储在数据库表中,以便可以对其进行检索。

编辑:
为了进一步阐明我的问题。我想学习如何将RSA私钥存储在数据库表中,这样就可以从数据库中检索回RSA私钥,而不会出现IllegalBlockSizeException异常。

最佳答案

我建议您进一步调试代码-通过a)尝试使用作为字符串显式放置在代码中的键来执行它,并确保它可以正常工作,然后b)确保从数据库返回的内容是相同的字符串你原来有。这些步骤将使您的问题中的数据库逻辑部分与加密逻辑部分分离。

但是,要获得有关该错误的更具体的答案,可能需要查看您的代码。到目前为止,您似乎在尝试使用需要二进制形式的密钥的文本形式。或者,也许在将密钥的base64发送给db时搞砸了。

关于java - 如何从数据库表中存储和检索RSA私钥? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29771138/

10-12 22:54