2017-07-21 34 views
0

我们有一个vb6应用程序,可以使用我们自己的加密方法创建用户并将加密密码保存到我们的oracle数据库中。然后,我们有,为了验证用户的日志中查询该表中的Visual Basic的Web服务这就是问题在未来Oracle查询在vb.net中错误地转换加密列值

例如:。

  • 密码保存在数据库中为[nμ} RR«RY KK]
  • 的vb.net应用程序然后查询这个密码,并将其返回为[nμ} R 5 R«?RY?KK]

据我了解,这是因为我们使用的OleDBConnection不正确地翻译Oracle中使用的字符集。我的问题是,有没有办法解决这个问题,以便从数据库返回的值与数据库中的内容匹配?

+0

您使用哪种OleDB提供程序?微软还是Oracle? –

+0

数据库的字符集是什么?使用'SELECT * FROM nls_database_parameters WHERE parameter ='NLS_CHARACTERSET';' –

+0

@WernfriedDomscheit检查我们使用的oracle提供程序,这是我们的连接字符串:Provider = MSDAORA.1; Password = [Password]; User ID = [User]; Data Source = [数据库] –

回答

0

很多使用Google和许多有用的答案后,我的问题竟然是相关的两件事情:

  1. 甲骨文使用Oracle 8i的,而不是应用程序使用,只能正确地解密数据的版本最新的oracle。这是由于许多客户仍使用旧设置而造成的限制。用oracle 8i客户端加密的数据不会使用oracle 10客户端正确解密。
  2. 随着oracle的版本,客户端类型 - 32位与64位 - 是解密的一个重要的区分因素。对于这种情况,我需要32位客户端才能使用Wernfried Domscheit建议的oracle提供程序,该提供程序可按预期正确解密和加密数据。

简而言之,oracle 8i 32位使用的字符集和最新的oracle 64位使用的字符集对于使用诸如vb.net中的“Chr”等方法的ansi字符将不会相同。