有没有办法使用私钥从签名数据中获取纯文本?
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。但是我手头的用例是从签名数据中获取原始纯文本。这可能吗?
不,您不能仅从签名中检索原始内容。
无论您使用什么密钥,单独的签名都不包含足够的信息来恢复原始明文。
签名的基本思想是与明文一起发送。这意味着明文将是可见的,但签名可用于验证消息是否由声称这样做的人编写(或至少签名)并且此后未被篡改。
签名与加密不同。两者经常使用相同或相关的技术,都属于密码学范畴。
纯文本使用 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。但是我手头的用例是从签名数据中获取原始纯文本。这可能吗?
不,您不能仅从签名中检索原始内容。
无论您使用什么密钥,单独的签名都不包含足够的信息来恢复原始明文。
签名的基本思想是与明文一起发送。这意味着明文将是可见的,但签名可用于验证消息是否由声称这样做的人编写(或至少签名)并且此后未被篡改。
签名与加密不同。两者经常使用相同或相关的技术,都属于密码学范畴。