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:我在网上找到了一种使用 java.security.Signature#verify() 的公钥Java 代码示例验证签名的方法。但这不是我需要的。
注意2:我还找到了一种加密和解密的方法,如这里提到的RSA Signing and Encryption in Java。但我手头的用例是从签名数据中获取原始纯文本。那可能吗?
解决方案
不,您不能仅从签名中检索原始内容。
无论您有权访问什么密钥,仅签名都不包含足够的信息来恢复原始明文。
签名的基本思想是将其与明文一起发送。这意味着明文将是可见的,但签名可用于验证消息是否由声称这样做的人编写(或至少签名)并且从那时起没有被篡改。
签名与加密不同。两者经常使用相同或相关的技术,并且都属于密码学。
推荐阅读
- c# - 显示来自 linq 查询的数据的问题
- data-visualization - 如何在 Oracle 可视化云中更改语言?
- dart - Flutter 布局问题(ListView 和 GridView)
- python - pandas to_csv 将 str 列转换为 int(或 float)
- javascript - gmail如何在没有监听器的情况下捕获鼠标事件?
- android - 即时运行不适用于 android studio 3.3 更新
- ruby - 如何从 rom-sql 中的连接表中提取别名列?
- javascript - FormData 在不应该出现的时候附加产生错误
- android - 如何确定应用程序是 32 位还是 64 位?
- php - 基本的石头、纸、剪刀游戏需要协助