全部产品
Search
文档中心

常见问题

更新时间: 2020-01-09

本文针对当前版本 Java SDK 的常见问题提供解决方法以供参考。

问题 1:加载 user.key 失败,提示 key 长度不合法

运行错误提示:

  1. 09:49:40.623 [main] ERROR com.github.lyd.msg.provider.DemoSample - unable to read private key,wrong password? errorCode :{MychainSdkErrorCodeEnum{errorCode='30001', errorDesc='sdk invalid private key'}}
  2. 09:49:40.626 [main] ERROR com.github.lyd.msg.provider.DemoSample - unable to read encrypted data: 1.2.840.113549.1.12.1.3 not available: Illegal key size or default parameters
  3. Exception in thread "main" com.alipay.mychain.sdk.exceptions.MychainSdkException: unable to read encrypted data: 1.2.840.113549.1.12.1.3 not available: Illegal key size or default parameters

error1

解决方法:

出现此错误的原因是个别 JDK 的默认配置限制了 key 的长度,因此 SDK 在加载 key 文件时解密失败。

可在 DemoSample.javamain 函数最开始位置,增加一段代码来进行处理,如下所示。

  1. String errorString = "Failed to modify key-length permissions";
  2. int newMaxKeyLength;
  3. try {
  4. if ((newMaxKeyLength = Cipher.getMaxAllowedKeyLength("AES")) < 256) {
  5. System.out.println("will modify aes length");
  6. Class c = Class.forName("javax.crypto.CryptoAllPermissionCollection");
  7. Constructor con = c.getDeclaredConstructor();
  8. con.setAccessible(true);
  9. Object allPermissionCollection = con.newInstance();
  10. Field f = c.getDeclaredField("all_allowed");
  11. f.setAccessible(true);
  12. f.setBoolean(allPermissionCollection, true);
  13. c = Class.forName("javax.crypto.CryptoPermissions");
  14. con = c.getDeclaredConstructor();
  15. con.setAccessible(true);
  16. Object allPermissions = con.newInstance();
  17. f = c.getDeclaredField("perms");
  18. f.setAccessible(true);
  19. ((Map) f.get(allPermissions)).put("*", allPermissionCollection);
  20. c = Class.forName("javax.crypto.JceSecurityManager");
  21. f = c.getDeclaredField("defaultPolicy");
  22. f.setAccessible(true);
  23. Field mf = Field.class.getDeclaredField("modifiers");
  24. mf.setAccessible(true);
  25. mf.setInt(f, f.getModifiers() & ~Modifier.FINAL);
  26. f.set(null, allPermissions);
  27. newMaxKeyLength = Cipher.getMaxAllowedKeyLength("AES");
  28. }
  29. } catch (Exception e) {
  30. throw new RuntimeException(errorString, e);
  31. }
  32. if (newMaxKeyLength < 256) {
  33. throw new RuntimeException(errorString);
  34. }

问题 2:加载 user.key 解密失败

运行错误提示:

error2

解决方法:

此错误通常是因账户 user.key 的密码错误导致,建议检查 DemoSample.java 中是否准确配置了 userPassword 变量,设定正确密码。如果忘记密码,可前往 BaaS 平台重新创建一个新的账户,并配置密码、下载新的 user.key 文件,然后重试。

问题 3:Maven文件引入SDK包失败

运行错误提示:

如果提示找不到sdk或netty包,例如下图所示,请尝试手动引入包的绝对路径。error

解决方法:

pom.xml文件中添加:

  1. <dependencies>
  2. <dependency>
  3. <groupId>junit</groupId>
  4. <artifactId>junit</artifactId>
  5. <version>4.12</version>
  6. <scope>test</scope>
  7. </dependency>
  8. <dependency>
  9. <groupId>io.netty</groupId>
  10. <artifactId>netty-tcnative-openssl-static</artifactId>
  11. <version>2.0.17</version>
  12. <scope>system</scope>
  13. <systemPath>
  14. {libdir}/netty-tcnative-openssl-static-2.0.17-Final-mychain-{platform}-x86_64.jar
  15. </systemPath>
  16. </dependency>
  17. <dependency>
  18. <groupId>com.alipay.mychainx</groupId>
  19. <artifactId>mychainx-sdk</artifactId>
  20. <version>0.10.2.6</version>
  21. <scope>system</scope>
  22. <systemPath>{libdir}/mychainx-sdk-0.10.2.6.jar
  23. </systemPath>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.slf4j</groupId>
  27. <artifactId>slf4j-api</artifactId>
  28. <version>1.7.25</version>
  29. </dependency>
  30. <dependency>
  31. <groupId>com.google.guava</groupId>
  32. <artifactId>guava</artifactId>
  33. <version>20.0</version>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.bouncycastle</groupId>
  37. <artifactId>bcpkix-jdk15on</artifactId>
  38. <version>1.60</version>
  39. </dependency>
  40. <dependency>
  41. <groupId>io.netty</groupId>
  42. <artifactId>netty-all</artifactId>
  43. <version>4.1.29.Final</version>
  44. </dependency>
  45. <dependency>
  46. <groupId>commons-io</groupId>
  47. <artifactId>commons-io</artifactId>
  48. <version>2.4</version>
  49. </dependency>
  50. <dependency>
  51. <groupId>org.apache.commons</groupId>
  52. <artifactId>commons-lang3</artifactId>
  53. <version>3.0</version>
  54. </dependency>
  55. </dependencies>

注意:上述 {libdir} 请修改为您sdk文件的真实路径;{platform} 请修改为您的平台类型,如windows、linux或osx。