无法加载RSA私钥对字符串进行签名

杀手野兽

我正在尝试使用使用此处的命令生成的私钥对字符串消息进行签名这是下面的代码,用于加载和签名消息。

private String signMessage(String message) throws Exception {
    Signature rsa = Signature.getInstance("SHA1withRSA");
    rsa.initSign(getPrivate(privateKeyPath));
    rsa.update(message.getBytes());
    return rsa.sign().toString();
}

public PrivateKey getPrivate(String filename) throws Exception {
    byte[] keyBytes = Files.readAllBytes(new File(filename).toPath());
    PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    return kf.generatePrivate(spec);
}

澄清我提供的privatekeyPath与相似/path/test.der

但是,在尝试对消息签名时出现以下错误- java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format

怎么了 为什么我似乎无法用私钥签名消息?有人可以指定一种完成此工作的方法吗?

佩德罗夫

看来您的getPrivate方法是正确的,所以我认为问题出在密钥的生成或格式上

der文件可以包含二进制格式的证书或私钥。对于pem文件,它们以base 64进行编码。通常,您需要一个.key文件或一个.pem文件,其内容以-----BEGIN PRIVATE KEY-----

确保您使用的是der包含pkcs#8密钥的二进制格式,以便Java可以读取它。在此处查看完整的示例:https : //stackoverflow.com/a/19387517/6371459


在您的代码rsa.sign().toString()中出现错误,因为无法将二进制数组转换为字符串。您应该使用二进制数据或将其编码为以64为基数。请注意,在链接的问题中,签名以base64编码。您不需要这样做,因为您可以使用二进制数组。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用私钥用rsa-sha256签名字符串?

如何用私钥对字符串签名

无法使用.Net Core中的RSA私钥解密连接字符串

如何从字符串加载RSA公共密钥在Java签名验证?

从字符串 Crypto++ 导入 RSA 公钥/私钥

如何从 Java 字符串加载 EC 私钥?

将 RSA 签名转换为字符串

python字符串格式pkcs8 RSA签名

无法使用我的私钥从API解码字符串

如何将 Rsa 密钥对(字符串)转换为加密密钥以对数据进行签名

Happstack.lite教程无法使用“非法类型签名:'字符串'”进行编译

将字符串转换为私钥和公钥(RSA)

无法在 XmlDocument 中加载字符串

ECDSA算法教程以对字符串进行签名

从整数加载rsa私钥,并在openssl中转换为PEM格式或RSA结构以签名消息

从Pem字符串Golang生成私钥

JSch从字符串添加私钥

使用Crypto ++从字符串导入私钥

C#通过签名和RSA公钥验证Json字符串

javax.crypto.BadPaddingException:当我尝试使用私钥解密RSA字符串时发生解密错误

将存储在环境变量中的rsa私钥写入JSON文件,而不会破坏JSON字符串

无法使用导入到AndroidKeyStore的RSA签名进行签名

使用通过Heroku工头从.env文件加载的RSA私钥对JWT签名时出错

如何从文件加载RSA私钥

如何使用rs256算法使用我自己的rsa私钥对字节进行签名?

如何在python中使用加密的RSA私钥(AES-256-CBC)对数据进行签名

使用rsa私钥对数据签名

Python密码术:无法使用PKCS1v15填充使用RSA私钥签名

使用SSH.NET从配置字符串加载SSH私钥时,出现“ Renci.SshNet.Common.SshException:私钥文件无效”