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

时间:2011-08-18 04:25:58

标签: java security random

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

或者有替代方法吗?

我查看了公共私钥加密和相关内容的常用方法。根据我的要求,我不需要这种机制,因为它太多标准的东西。我正在寻找一个像这样的简单替代方案。

谢谢, Abishek

2 个答案:

答案 0 :(得分:0)

我认为你所寻找的东西类似于time-synchronized one-time password

一个简单的方法来做到这一点是利用系统时间,四舍五入至最接近的,比方说,6秒“脉冲”作为用于加密的安全随机数发生器的种子(Java提供SecureRandom FWIW)。然后,连同一个预先共享的“秘密”,通过单向加密哈希(例如,SHA256)来生成您的字母数字(十六进制或base64)字符串。

如果不需要显示/沿着实际的字符串通过,那么我想你可以跳过步骤散列和只使用共享秘密和所述同步的时间作为IV +键施加到所述通信流的加密在两端。

这种方法的明显风险或复杂性是使两个系统时钟保持同步。如果您使用NTP或其他时间同步协议,那么您也必须保护它(否则您可能会对重放攻击开放)。标准计算机时钟容易漂移(因此6秒窗口),你也必须防止它们被篡改。

(免责声明:我不是安全专家所以不要想一下我所概述的内容是完全安全/安全的。)

答案 1 :(得分:0)

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

这不是一个新问题,它已经解决了。 Peter在Diffie-Hellman指出了你,这是在不安全线上建立共享秘密(即密钥)的标准安全解决方案。