有没有办法使用私钥从签名数据中获取纯文本?

Is there any way to get the plain text from signed data using private key?

纯文本使用 java.security.Signature 签名。下面是用于签署纯文本的代码

    public String getSignature(String plainText) throws Exception
    {
        KeyStore keyStore = loadKeyStore(); // A local method to read the keystore file from file system.
        PrivateKey privateKey = (PrivateKey) keyStore.getKey(KEY_ALIAS_IN_KEYSTORE, KEYSTORE_PASSWORD.toCharArray());
        
        Signature privateSignature = Signature.getInstance(SIGNATUREALGO);
        privateSignature.initSign(privateKey);
        privateSignature.update(plainText.getBytes("UTF-8"));
    
        byte[] signature = privateSignature.sign();
        
        return String.valueOf(signature);

        // KEY_ALIAS_IN_KEYSTORE, KEYSTORE_PASSWORD and SIGNATUREALGO are all constant Strings
    }

注意 1: 我在网上找到了一种使用 public 密钥 Java Code Examples for java.security.Signature#verify() 来验证签名的方法。但这不是我要求的。

注2:我也找到了这里提到的加解密方法RSA Signing and Encryption in Java。但是我手头的用例是从签名数据中获取原始纯文本。这可能吗?

不,您不能仅从签名中检索原始内容。

无论您使用什么密钥,单独的签名都不包含足够的信息来恢复原始明文。

签名的基本思想是与明文一起发送。这意味着明文将是可见的,但签名可用于验证消息是否由声称这样做的人编写(或至少签名)并且此后未被篡改。

签名与加密不同。两者经常使用相同或相关的技术,都属于密码学范畴。