相关疑难解决方法(0)

InvalidKeyException非法密钥大小

我有一个在我的开发MacBook Pro上运行良好的测试,但无法在持续集成的TeamCity服务器中运行.

错误如下:

java.security.InvalidKeyException: Illegal key size
    at javax.crypto.Cipher.a(DashoA13*..)
    at javax.crypto.Cipher.init(DashoA13*..)
    at javax.crypto.Cipher.init(DashoA13*..)
Run Code Online (Sandbox Code Playgroud)

开发盒和TeamCity都使用Java 1.6,我使用BouncyCastle库来满足特殊的AES加密需求.

代码如下:

private byte[] aesEncryptedInfo(String info) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidParameterSpecException, InvalidAlgorithmParameterException, NoSuchProviderException {
    Security.addProvider(new BouncyCastleProvider());
    SecretKey secret = new SecretKeySpec(CUSTOMLONGSECRETKEY.substring(0, 32).getBytes(), "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
    cipher.init(Cipher.ENCRYPT_MODE, secret, new IvParameterSpec(VECTOR_SECRET_KEY.getBytes()));
    return cipher.doFinal(info.getBytes("UTF-8"));
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

看起来根据所选答案,我必须在我的TeamCity安装上修改一些东西,它可能会影响一些用户安装 - 所以它不是一个好选择我必须切换到另一个加密库来做到这一点没有限制.所以充满弹性的城堡可能会有所帮助.

更新2

我实际上切换到使用BouncyCastle来避免这种限制.请注意,这仅适用于直接使用自己的BC类,而不是BC提供程序.

java jce aes

57
推荐指数
2
解决办法
7万
查看次数

如何读取也用bouncycastle在DER中编码的PKCS8加密私钥?

我已经尝试过以下问题的答案:

有弹性的城堡:PEMReader => PEMParser

使用bouncycastle / spongycastle读取加密的私钥

但是由于我调用时我的加密密钥已编码为DER

Object object = pemParser.readObject(); 
Run Code Online (Sandbox Code Playgroud)

对象为null。

我可以使用openssl的命令将其转换为PEM(它也会解密密钥)

openssl pkcs8 -inform der -in pkey.key -out pkey.pem 
Run Code Online (Sandbox Code Playgroud)

但我需要读取其原始文件中的密钥

java cryptography bouncycastle pem der

4
推荐指数
1
解决办法
1868
查看次数

配置 tomcat/hibernate 以拥有支持 1.2.840.113549.1.5.13 的加密提供程序

在使用 jndi 数据源配置 tomcat 以使用 ssl 身份验证连接到 postgres 服务器时(请参阅为 tomcat jndi 连接到 postgresql 提供证书),出现以下错误:

[main] WARN org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata : Cannot create PoolableConnectionFactory (Could not find a java cryptographic algorithm: Cannot find any provider supporting 1.2.840.113549.1.5.13.)
Run Code Online (Sandbox Code Playgroud)

(这是初始化时的警告,但是当我实际尝试使用连接时,我看到与阻止访问数据库的错误相同)。

基于这个答案:Reading PKCS8 in PEM format: Cannot find provider我尝试/usr/lib/jvm/java-11-openjdk-amd64/conf/security/java.security通过添加org.bouncycastle.jce.provider.BouncyCastleProvider为第一个安全提供程序来进行修改。我还尝试将 jar bcprov-jdk15on-1.64.jar 添加到/usr/lib/jvm/java-11-openjdk-amd64/lib/usr/share/java(任何地方都没有 lib/ext 目录)。

问题仍然存在。

我应该如何告诉对 java 运行时、tomcat 或 hibernate 使用 Bouncy Castle 安全提供程序?

更新:还尝试安装 …

java ssl tomcat hibernate

2
推荐指数
1
解决办法
1718
查看次数

标签 统计

java ×3

aes ×1

bouncycastle ×1

cryptography ×1

der ×1

hibernate ×1

jce ×1

pem ×1

ssl ×1

tomcat ×1