【问题标题】:Exception in connecting to DB2 source using Java JDBC driver使用 Java JDBC 驱动程序连接到 DB2 源时出现异常
【发布时间】:2023-04-06 07:50:01
【问题描述】:

我正在尝试使用 java 连接 DB2 数据库,在我提供的驱动程序和连接字符串详细信息下方,

Class.forName("com.ibm.db2.jcc.DB2Driver");

DB2DataSource db2ds = new DB2DataSource();
db2ds.setServerName("servername");
db2ds.setPortNumber(portnumber);
db2ds.setDatabaseName(databasename);
db2ds.setUser(username);
db2ds.setPassword(password);
db2ds.setSecurityMechanism(DB2BaseDataSource.ENCRYPTED_USER_AND_DATA_SECURITY);
db2ds.setDriverType(4);    
sourceConnection=db2ds.getConnection();

对于这个连接,我添加了以下 jars

1)db2jcc.jar 
2)db2jcc_license_cu.jar

但我收到以下错误,

com.ibm.db2.jcc.a.SqlException: java.security.InvalidAlgorithmParameterException is caught when initializing EncryptionManager 'Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)'
at com.ibm.db2.jcc.a.x.<init>(x.java:89)
at com.ibm.db2.jcc.b.b.lc(b.java:2353)
at com.ibm.db2.jcc.b.b.A(b.java:1190)
at com.ibm.db2.jcc.b.b.b(b.java:759)
at com.ibm.db2.jcc.b.b.a(b.java:725)
at com.ibm.db2.jcc.b.b.a(b.java:430)
at com.ibm.db2.jcc.b.b.<init>(b.java:374)
at com.ibm.db2.jcc.DB2DataSource.getSimpleConnection(DB2DataSource.java:87)
at com.ibm.db2.jcc.DB2DataSource.getConnection(DB2DataSource.java:65)
at com.ibm.db2.jcc.DB2DataSource.getConnection(DB2DataSource.java:47)
at TestDB2.main(TestDB2.java:73)

我尝试了不同的安全机制,但仍然遇到相同的错误。我尝试了以下安全机制选项,

1) ENCRYPTED_USER_AND_DATA_SECURITY 
2) CLEAR_TEXT_PASSWORD_SECURITY 
3) ENCRYPTED_PASSWORD_SECURITY 
4) ENCRYPTED_USER_AND_PASSWORD_SECURITY
5)ENCRYPTED_USER_PASSWORD_AND_DATA_SECURITY

我使用JDK 1.6.0 版本来开发代码

请指导成功连接需要做什么。

提前致谢。

【问题讨论】:

    标签: java authentication jdbc db2


    【解决方案1】:

    您必须使用SecurityProviderBouncyCastleProvider 对您来说是个不错的选择。您所要做的就是,作为getConnection() 方法的第一步,使用以下行:

     Security.addProvider(new BouncyCastleProvider());
    

    【讨论】:

    • 您好,感谢您的回复。我无法在安全文件中添加提供程序,所以我复制了文件并将其粘贴到其他地方并将提供程序添加到安全文件中,而不是在我的旧代码中添加了下面的代码,导入 org.bouncycastle。 jce.provider.BouncyCastleProvider; ..... Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    • 我们在eclipse的VM参数中添加了安全文件位置。 -Djava.security.policy=\java.security 现在我遇到了同样的错误,所以我使用下面的代码加密了我的密码,然后我将此密码设置到数据源中。这次我也遇到了同样的错误。 “com.ibm.db2.jcc.a.SqlException: java.security.InvalidAlgorithmParameterException 在初始化EncryptionManager时捕获'Prime size必须是64的倍数,并且只能在512到1024(含)之间'”
    • 最终字符串 AES_ALGORITHM = "AES/CTR/NoPadding";最终字符串 PROVIDER = BouncyCastleProvider.PROVIDER_NAME; final byte[] AES_KEY_128 = { // 现在硬编码 78, -90, 42, 70, -5, 20, -114, 103, -99, -25, 76, 95, -85, 94, 57, 54 }; final byte[] IV = { // 暂时硬编码 -85, -67, -5, 88, 28, 49, 49, 85, 114, 83, -40, 119, -65, 91, 76, 108} ;最终 SecretKeySpec secretKeySpec = new SecretKeySpec(AES_KEY_128, "AES"); final IvParameterSpec ivSpec = new IvParameterSpec(IV);
    • Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());密码密码 = Cipher.getInstance(AES_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE,secretKeySpec,ivSpec); byte[] encrypted = cipher.doFinal("Password".getBytes()); db2ds.setPassword(encrypted.toString());你能指导我如何进一步进行吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2013-12-22
    相关资源
    最近更新 更多