【问题标题】:PRNG with seed in an interval间隔内带有种子的 PRNG
【发布时间】:2014-06-28 15:42:22
【问题描述】:

所以我的问题如下:我正在尝试在 Java 中实现一种使用用户选择的密码 P(比如“4z327yU10p”)加密消息 M(比如从 1 个字符到假设 1000)的方法)。然后,我想使用伪随机数生成器 (PRNG) 将消息隐藏在图像中以选择像素。我的种子是密码。

这是我的方法:

  1. 对密码进行 sha3 以获取 256b 输出以用作密钥
  2. 使用 AES 和先前生成的密钥来获取加密消息
  3. 将输出用作我的 PRNG 的种子

对于 (1):短密码可以吗?

对于(2):AES可以用于小消息吗?

对于(3):如何在图像的间隔中有随机数? (0,...,480000) 因为我的算法给了我一个int?

代码如下:

public void initSeed(String password){ //pour initier la seed avec le password
    Message message = new Message();
    message.initMessageASCII(password);
    List <Integer> temp = message.getMsg();
    byte[] vect = new byte[temp.size()];
    for (int i=0; i< temp.size(); i++){
        vect[i] = temp.get(i).byteValue();
    }
    this.seed = vect;
}

public void init() { //pour initier le remplissage du vecteur randList
    SecureRandom random;
    try {
        random = SecureRandom.getInstance("SHA1PRNG"); //SHA1PRNG est un algorithme très efficace
        random.setSeed(seed);
        random.nextBytes(randList); //fonction pour créer les bytes aléatoires et les écrire dans "bytes"
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
}

【问题讨论】:

  • 那么,您的具体问题是什么?
  • 感谢您编辑和纠正我的错误,但您删除了我的问题。 1) sha3 使用小键是否有效? 2) AES 是否在处理小消息? 3)你知道一个伪随机数生成器,它接受一个种子并在预定的时间间隔内给我随机数?
  • 我猜您出于错误的原因使用了错误的加密算法。但是,嘿,好吧,我会把它们回滚并给你直接答案。

标签: java encryption aes sha1 prng


【解决方案1】:

我将回答单独的问题(提出单独的问题):

  1. 是的,SHA-3 可用于任意大小的消息。
  2. 是的,AES 可用于任意大小的消息。
  3. Random.nextInt(int)

不过,您可以将其视为顾问诅咒,我给了您您所要求的,而不是您需要的。例如,您不需要(尚未标准化的)SHA-3,但您应该改用 PBKDF。

【讨论】:

  • 好的,非常感谢,我想我明白了。实际上,我不需要特别使用 SHA3 或 AES,这是我自己知道的。我只是在寻找 PBKDF,它似乎正是我所需要的,除了 Salt:它是完全随机的吗?因为我需要用相同的密码来解密我的消息,所以我必须在别处再次找到 Salt。
  • 是随机的,但是可以和密文一起存储。密文也应该是随机的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 2014-09-16
  • 2021-11-10
  • 2020-12-25
相关资源
最近更新 更多