【发布时间】:2012-01-17 20:38:01
【问题描述】:
我知道非对称加密的一个特点是,如果你用公钥加密文本,每次都会得到不同的结果。
有没有办法总是得到相同的结果(没有 RSA)?
示例代码:
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(
new RSAPublicKeySpec(
new BigInteger("83087..."),
new BigInteger("65537")));
PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(
new RSAPrivateKeySpec(
new BigInteger("830874..."),
new BigInteger("514268...")));
Cipher cipher = Cipher.getInstance( "RSA" );
cipher.init( Cipher.ENCRYPT_MODE, publicKey );
cipher.doFinal( "test");
【问题讨论】:
-
你的意思是不对称的吗?这是关于对称性而不是时间。
-
另外,我看不出加密(使用相同的密钥)会给你带来不同的结果。那将无法解密...
-
@phq 你是对的,对不起@Thor84no 这很容易实现,例如在末尾添加一个随机数
-
@MaxSchmidt 这只是故意尴尬。很快就意识到我说的是使用 same 密钥加密的 same 数据。你真的不想想要避免不同的数据在加密时有不同的输出。
-
@Thor84no RSA 加密是随机的。对于给定的公钥和给定的消息,每次加密尝试都会产生不同的字节序列。这是正常的,也是意料之中的;随机字节是作为填充阶段的一部分注入的,不注入随机字节会导致加密系统较弱。在解密过程中,填充字节被定位并移除,原始消息被完好无损地恢复。
标签: java encryption encryption-asymmetric