加密功能每次都返回不同的输出

Ksh*_*rma 5 java encryption cryptography jasypt

我有以下代码 -

import org.jasypt.util.text.BasicTextEncryptor;

public static void main(String[] args) {
    BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
    textEncryptor.setPassword("kshitiz");

    String cipherText = textEncryptor.encrypt("my_secret");
    System.out.println(cipherText);
}
Run Code Online (Sandbox Code Playgroud)

每次运行它时输出都不同 -

第一次运行 - 7vZzcsVFortOUf4yLyQ9xSEUM2pKSXAs

第二轮 - Z3YDxfPpubGAQMpr+5MAKR5P09mAJ7Wd

第3次运行 - kVGIGcCEXZDFJnV/n0lxyFN5WW7dWMT7

所有输出都是正确的,因为解密它们给了我my_secret.

这是怎么回事?

ini*_*mfs 5

从该方法的文档中复制。

PKCS #5:基于密码的加密标准中描述了用于执行加密操作的机制。

该加密器为每个加密操作使用盐。盐的大小取决于所使用的算法。该盐用于创建加密密钥,如果由随机生成器生成,它也会以未加密的方式附加在结果的开头,以便可以执行解密操作。

如果使用随机盐生成器,则同一消息的两个加密结果将始终不同(随机盐重合的情况除外)。这可以通过一次难以对数据集进行强力攻击并迫使攻击者对每个单独的加密数据块执行强力攻击来增强安全性。

本质上,为了符合标准,使用运行时随机生成的加密盐并将其附加到输出字符串。这种盐可以防止使用预先计算的彩虹表进行暴力攻击。


Ant*_*ony 3

它可能使用随机 IV 或随机填充。这实际上对于某些攻击下的安全性很重要,但它会导致同一消息产生不同的密文。

  • 这种随机化实际上对于安全性非常重要。否则明文的大量信息就会被泄露。 (2认同)