首页 > 解决方案 > 有没有办法使用私钥从签名数据中获取纯文本?

问题描述

纯文本使用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:我在网上找到了一种使用 java.security.Signature#verify() 的公钥Java 代码示例验证签名的方法。但这不是我需要的。

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

标签: javasecuritysslprivate-key

解决方案


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

无论您有权访问什么密钥,仅签名都不包含足够的信息来恢复原始明文。

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

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


推荐阅读