在不同的java程序中生成两个相同的随机字母数字字符串

在不同的java程序中生成两个相同的随机字母数字字符串,java,security,random,Java,Security,Random,我想看看是否有可能在两个不同的java代码中生成两个相同的字母数字字符串。这是为了在客户端和服务器之间进行安全通信 还是有其他方法可以做到这一点 我研究了公共私钥加密的常用方法和相关的东西。根据我的要求,我不需要这样一个机制,因为它有太多的标准内容。我想找一个像这样简单的替代品 谢谢, Abishek我想你要找的是一个 一种简单的方法是使用系统时间,四舍五入到最接近的,比如说6秒的“脉冲”,作为Java提供的加密安全随机数生成器SecureRandom FWIW的种子。然后,与预共享的“秘密”一

我想看看是否有可能在两个不同的java代码中生成两个相同的字母数字字符串。这是为了在客户端和服务器之间进行安全通信

还是有其他方法可以做到这一点

我研究了公共私钥加密的常用方法和相关的东西。根据我的要求,我不需要这样一个机制,因为它有太多的标准内容。我想找一个像这样简单的替代品

谢谢,
Abishek我想你要找的是一个

一种简单的方法是使用系统时间,四舍五入到最接近的,比如说6秒的“脉冲”,作为Java提供的加密安全随机数生成器SecureRandom FWIW的种子。然后,与预共享的“秘密”一起,通过单向加密散列(比如SHA256)生成字母数字十六进制或base64字符串

如果您不需要显示/传递实际字符串,那么我认为您可以跳过散列步骤,只使用共享密钥和同步时间作为两端应用于通信流的密码的IV+密钥

这种方法的明显风险或复杂性在于保持两个系统时钟同步。如果您使用NTP或其他时间同步协议,那么您也必须确保其安全,否则您可能会受到重播攻击。标准的计算机时钟很容易漂移,因此有6秒的时间窗口,你必须确保它们不被篡改


免责声明:我不是安全专家,所以请不要认为我所概述的内容是完全安全的。

如果两个不同的系统生成相同的字符串,那么生成器通常不会加密安全。一旦攻击者知道输入,她将能够生成相同的字符串,并且输入将与Alistair建议的当前日期/时间类似


这不是一个新问题,而且已经解决了。Peter已经向您指出,这是建立共享秘密的标准安全解决方案,即不安全线路上的密钥。

刚刚意识到,即使只是系统时间和“秘密”也足以生成合理安全的加密哈希,无需生成随机数。另外,另一个可能的风险是,如果“秘密”被知道,那么系统时间舍入可以相对容易地猜测,从而允许窃听者破解密码。不过,我不想在接受后编辑我的原始答案。