加密IP地址

时间:2010-11-04 19:25:09

标签: java security encryption

我需要加密IP地址,将其保存到文件中,然后才能检索它。我想知道是否有人可以建议一个好方法来做到这一点。只是一些加密算法的名称可以很好或链接到资源。

我完成了我的研究,并提出了一些解决方案。只是想确保我错过了一些东西。如果它有帮助,应用程序是用java编写的。我们确实将JNI用于某些本机功能,但更愿意远离JNI。

由于

编辑:

它是一个客户端/服务器模型。服务器将加密的IP地址发送给客户端。客户端将解密它,然后连接到该地址。数据将只是一个字符串。它的IPv4。

7 个答案:

答案 0 :(得分:2)

正如其他答案已经表明的那样,AES是您解决此问题的最佳选择。然而,正如加密一样,真正的问题不是选择哪种算法;它是how to keep your key a secret。如果它只是源代码中的一个字符串,那么有人可能需要很少的工作来计算该密钥并使用它来解密您的文件。

答案 1 :(得分:2)

假设您希望在客户端上进行任意加密,那么您就会遇到严重的密钥管理问题。逆向工程客户端代码以获取嵌入式加密密钥非常简单。如果密钥在互联网上受到损害和破坏,你需要考虑你要做什么。一旦它嵌入到您的代码中,那么它就在您手中(see CSS and deCSS,以便更有趣地阅读该主题)。

因此,更好的解决方案是让服务器进行加密和解密,客户端只发送一堆本地存储的字节。

现在,以易于维护的方式加密服务器上的内容有什么好方法?我在谈论密钥管理;便于使用;加密强度;简单的Ant / Maven目标/目标来管理所述服务器端密钥的生成等。一个对我来说非常好的框架是KeyCzar by Google。简单的API和外部管理是小菜一碟。看一看。

答案 2 :(得分:1)

我可以回答你关于加密算法的直接问题:AES

Java有相应的类!

但我仍然怀疑你解决方案的稳健性

答案 3 :(得分:1)

答案 4 :(得分:1)

我强烈建议将BouncyCastle库用于Java。它比Java中内置的加密内容更清晰,更容易理解。将算法的名称传递给方法,看看你是否真的得到了密码,而不是乱用,你可以使用new。更容易。

答案 5 :(得分:1)

你提到你有几个解决方案,为什么不提它们。

此外,这是一个非常普遍的问题,您是在寻找对称算法还是更喜欢公钥/私钥,或者同时使用两者的东西?

如果您正在考虑将密钥保留在服务器上,因为IP地址很小(这是针对IPv6,http://en.wikipedia.org/wiki/IPv6),那么RSA将是一个不错的选择,因为您可以将公钥保留在服务器,但没有人可以创建没有私钥的新密钥。

您将如何使用这些数据?如果您要解密所有这些文件,只需将它们保存在一个文件中,然后将其压缩,然后加密整个文件。

更多细节将有助于缩小范围,因为有大量解决方案。

但是对于库,在Java中,我喜欢BouncyCastle(http://bouncycastle.org/),因为它们提供了大量选择,并且如果您需要与.NET交换密钥,则效果很好。

<强>更新

根据问题的最新更新,最关心的是如何交换加密密钥。

由于这是发送给客户,您最好的选择可能是使用类似RSA的东西来帮助解决这个问题。客户端将拥有一个私钥,服务器将拥有每个客户端的公钥,因此如果一个客户端被泄露,则整个系统不会。然后,服务器生成对称密钥(AES很好,我喜欢IDEA),并加密该密钥。然后,您将两个部分传输到客户端,然后客户端解密对称密钥,然后解密IP地址。

这个想法很受PGP欢迎。

正如我所提到的,你可能想要使用BouncyCastle,这样如果你的客户端是用.NET或Java编写的,你仍然可以进行密钥交换,因为它有两个平台的API。

如何从客户端获取服务器的密钥,反之亦然,取决于许多因素,但这将是整个系统中的薄弱环节,因此需要仔细设计该部分。

答案 6 :(得分:0)

如其他地方所述,这是毫无意义的。这些信息可通过其他方式获得,因此通过此渠道对其进行加密是一种竞争浪费时间。 Netstat是另一种可以检测地址的方式。