2

我有一个直接与数据库(Oracle)连接的 Java 桌面应用程序。该应用程序有多个用户帐户。通过网络发送用户密码(不是数据库密码)的正确方法是什么?我不想以纯文本形式发送它。

4

5 回答 5

5

您可以通过安全套接字连接进行连接,或者在将密码发送到数据库之前在本地对密码进行哈希处理(或者更好的是,两者都可以) - 理想情况下,密码应该以纯文本形式存在的唯一时间是在哈希处理之前。如果您可以在客户端完成所有这些操作,那就更好了。

于 2008-09-16T07:51:02.540 回答
4

您可以在 Oracle 客户端和 Oracle 数据库之间使用 SSL 连接。要使用 JDBC 在 oracle 客户端和服务器之间配置 SSL:

在服务器端:

1)首先,监听器必须配置为使用TCPS协议:

LISTENER = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcps)(HOST=servername)(PORT=2484)))

WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/server/wallet/path/)))

在客户端:

1)以下罐子需要是类 路径ojdb14.jar,,,oraclepki.jarojpse.jar

2) 用于连接的 URL 应为:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=servername)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=servicename)))

3)需要设置以下属性(作为系统属性(-D选项)或连接属性)

javax.net.ssl.trustStore, 
javax.net.ssl.trustStoreType, 
javax.net.ssl.trustStorePassword

参考:http ://www.oracle.com/technology/tech/java/sqlj_jdbc/pdf/wp-oracle-jdbc_thin_ssl_2007.pdf

于 2008-09-16T08:51:53.783 回答
2

同意,永远不要以明文形式发送用户选择的密码。但是,如果不使用公钥加密,如果您通过电子邮件向他们发送密码,它将是明文形式。我经常看到的一件事是,当用户忘记密码并请求将其发送给他们时,系统会生成一个新密码并将其发送用户。然后用户可以更改密码。

这样,用户选择的密码(用户可能在其他地方使用)永远不会发送,而他们的临时密码以明文形式发送,他们应该尽快更改它。

于 2008-09-16T07:51:41.977 回答
0

如果您不想以纯文本形式发送数据,请使用加密!

使用一些加密算法,如 AES、Twofish 等。

您还必须考虑客户端和服务器的位置。如果它们都在同一台机器上,那么使用加密是没有用的。如果它们在不同的机器上,使用一些加密算法来发送敏感数据。

如果您正在检查密码的有效性,您可以发送密码的哈希值。请注意,此方法仅在您自己比较密码时才有效。如果其他应用程序(您无法控制)正在执行验证工作,则您无法对密码进行哈希处理。

于 2008-09-16T07:50:39.937 回答
0

如果你直接连接到没有中间层的数据库,你应该考虑为每个真实用户使用一个数据库用户,因为否则你不能真正保护应用程序的访问。

如果您使用 ORa*Net 连接到 Oracle,则用户密码会自动加密(从 Oracle 8 开始),但在某些情况下它可能会退回到未加密的密码。这可以ORA_ENCRYPT_LOGIN=true在客户端环境中禁用。

于 2008-09-16T18:59:23.760 回答