相关疑难解决方法(0)

使用Java反射更改私有静态final字段

我有一个带有private static final字段的类,不幸的是,我需要在运行时更改.

使用反射我得到这个错误: java.lang.IllegalAccessException: Can not set static final boolean field

有没有办法改变价值?

Field hack = WarpTransform2D.class.getDeclaredField("USE_HACK");
hack.setAccessible(true);
hack.set(null, true);
Run Code Online (Sandbox Code Playgroud)

java reflection static final private

454
推荐指数
8
解决办法
22万
查看次数

Java安全:非法密钥大小或默认参数?

我之前曾问过一个关于这个问题的问题,但它没有得到正确的答案而且无处可去.

所以我已经澄清了关于这个问题的一些细节,我真的很想听听你如何解决这个问题或者我应该尝试什么的想法.

我在我的Linux服务器上安装了Java 1.6.0.12,下面的代码运行得非常完美.

String key = "av45k1pfb024xa3bl359vsb4esortvks74sksr5oy4s5serondry84jsrryuhsr5ys49y5seri5shrdliheuirdygliurguiy5ru";
try {
    Cipher c = Cipher.getInstance("ARCFOUR");

    SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "ARCFOUR");
    c.init(Cipher.DECRYPT_MODE, secretKeySpec);

    return new String(c.doFinal(Hex.decodeHex(data.toCharArray())), "UTF-8");

} catch (InvalidKeyException e) {
    throw new CryptoException(e);
}
Run Code Online (Sandbox Code Playgroud)

今天我在我的服务器用户上安装了Java 1.6.0.26,当我尝试运行我的应用程序时,我得到以下异常.我的猜测是它与Java安装配置有关,因为它在第一个工作,但在更高版本中不起作用.

Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at my.package.Something.decode(RC4Decoder.java:25) ~[my.package.jar:na]
    ... 5 common frames omitted
Run Code Online (Sandbox Code Playgroud)

第25行是: c.init(Cipher.DECRYPT_MODE, secretKeySpec);

注意:
*服务器的1.6.0.12 …

java

394
推荐指数
10
解决办法
39万
查看次数

检查Unlimited Cryptography是否可用

如何在Java代码中检查当前JVM是否具有可用的无限强度加密?

java jce

44
推荐指数
5
解决办法
3万
查看次数

如何在MacOSX中为JRE 7安装无限强度的JCE?

我为MacOSX安装了Oracle JRE 7(不是JDK),但我无法找到放置JCE管辖区文件的位置.

我需要用无限强度版本替换它们.

java macos jce

39
推荐指数
3
解决办法
4万
查看次数

为什么默认情况下不包括JCE Unlimited Strength?

建立

  • Java不提供对JCE无限强度策略文件的开箱即用支持
  • 这可以防止用户使用AES-256,这是广泛使用的加密标准的最大密钥大小
  • 不包括策略文件会导致许多问题:
  • 所有这些噪音导致破坏和/或错误的程序

  • 为什么这些没有被提供和像黑羊一样对待?

java encryption jce

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

JDK 9的JCE zip文件

我想尝试JDK 9,我需要修补JCE.我在哪里可以得到JCE zip file for JDK 9?或者我可以使用JDK 8吗?我为JDK 9搜索了JCE zip,但无法找到它.提前致谢.

java jce java-8 java-9

15
推荐指数
1
解决办法
6577
查看次数

local_policy.jar和US_export_policy.jar与Unlimited Strength Vs Default不同.

在java平台文档http://www.oracle.com/technetwork/java/javase/jrereadme-182762.html中.关于评论

/lib/security/local_policy.jar /lib/security/US_export_policy.jar


无限强度Java密码学扩展

由于某些国家/地区的导入控制限制,Java SE Development Kit和Java SE Runtime Environment附带的Java Cryptography Extension(JCE)策略文件允许使用强大但有限的加密.

JDK网站上提供了这些文件的无限强度版本,表明对加密强度没有限制,适用于符合条件的国家/地区的用户.那些居住在符合条件的国家/地区的人可以下载无限强度版本,并使用无限强度文件替换强加密jar文件.问题

  1. 每个JDK包都附带local_policy.jar和US_export_policy.jar吗?
  2. 默认local_policy.jar和US_export_policy.jar的限制是什么.这是关键尺寸吗?
  3. 如果我需要使用128位密钥,则需要使用Unlimited Strength Java Cryptography
    Extension
  4. 有没有办法可以将这两个罐子保存在外部路径中并加载它.因为我有更多50台服务器而不是每台JDK,我宁愿将它保存在一个中心位置.

java linux jce

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

无法使用kerberos票证缓存使用apache http client 4.5进行身份验证

我正在对kerberos认证的REST服务执行https请求.如果我使用keytab,一切都很好.但是,我要求我应该使用kerberos票证缓存文件,该文件是在使用其密码登录工作站时创建的.

我将用MY_DOMAINE.COM替换域名

所以,klist显示:

Ticket cache: FILE:/tmp/krb5cc_210007
Default principal: dragomira@MY_DOMAINE.COM

Valid starting     Expires            Service principal
05/15/18 07:21:51  05/15/18 17:21:51  krbtgt/MY_DOMAINE.COM@MY_DOMAINE.COM
        renew until 05/22/18 06:18:22
Run Code Online (Sandbox Code Playgroud)

像这样使用卷曲可以正常工作:

curl -k --negotiate -u :  'my_url' -v
Run Code Online (Sandbox Code Playgroud)

现在,让我们回到代码.我的login.conf是这样的:

com.sun.security.jgss.login {
  com.sun.security.auth.module.Krb5LoginModule required
  client=TRUE
  doNotPrompt=true
  useTicketCache=true;
};

com.sun.security.jgss.initiate {
  com.sun.security.auth.module.Krb5LoginModule required
  client=TRUE
  doNotPrompt=true
  useTicketCache=true;
};

com.sun.security.jgss.accept {
  com.sun.security.auth.module.Krb5LoginModule required
  client=TRUE
  doNotPrompt=true
  useTicketCache=true;
};
Run Code Online (Sandbox Code Playgroud)

我的http客户端的相关java代码是针对kerberos的,它是:

try {
    SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (chain, authType) -> true).build();
    HostnameVerifier hostnameVerifier = new NoopHostnameVerifier();
    Registry<AuthSchemeProvider> authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider>create()
            .register(AuthSchemes.SPNEGO, new SPNegoSchemeFactory()) …
Run Code Online (Sandbox Code Playgroud)

java kerberos apache-httpcomponents apache-httpclient-4.x apache-httpclient-5.x

8
推荐指数
1
解决办法
705
查看次数

JCE策略是否与openjdk 8捆绑在一起?

我正在尝试将java-1.8.0-openjdk jre和jdk打包,但我找不到openjdk 8的jce策略

在哪里可以找到它?谁能指出我的链接。

java redhat-openjdk

6
推荐指数
1
解决办法
2681
查看次数

Java:从applet为AES256修补客户端安全策略

我在商业Web应用程序中需要AES256加密/解密.目前一切都很好,密钥大小为128.这在加密方面并不令人满意,所以我的问题是如何最好地绕过这个问题而不需要用户手动安装任何东西.

我有来自Oracle的无限制管辖jar文件,但我不知道在用户的JRE/lib/security目录中替换这些文件是否与旧版本兼容.显然我不想破坏用户的JRE.此外,我对我的JRE安全目录有写权限,但我认为某些用户不具备这些权限.

有没有一个简单的方法来解决这个问题,或者我是坚持使用弱加密还是可能有问题的用户步骤?


更新"unrestricting" javax.crypto.JceSecurity

@ntoskml你是对的.getMaxAllowedKeyLength仍然返回有限的密钥大小,但加密成功,密钥大小== 256 :).如果有强加密功能,我会更新我的测试方法并设置密钥大小.谢谢

>>> from javax.crypto import Cipher
>>> Cipher.getMaxAllowedKeyLength("AES")
128
>>> from java.lang import Class
>>> c = Class.forName("javax.crypto.JceSecurity")
>>> isRestricted = c.getDeclaredField("isRestricted")
>>> isRestricted.setAccessible(True)
>>> isRestricted.set(None, False)
>>> isRestricted.get(None)
False
>>> Cipher.getMaxAllowedKeyLength("AES")
128
>>> from javax.crypto import KeyGenerator
>>> kge = KeyGenerator.getInstance("AES")
>>> kge.init(256)
>>> aesKey = kgen.generateKey()
>>> c2 = Cipher.getInstance("AES")
>>> c2.init(Cipher.ENCRYPT_MODE, aesKey)
>>> c2.doFinal("test")
array('b', [-81, 99, -61, -51, 93, -42, -68, -28, 107, 59, -109, -98, -25, …
Run Code Online (Sandbox Code Playgroud)

java security encryption applet cryptography

5
推荐指数
1
解决办法
2450
查看次数