- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在我的 Java 应用程序上启用 FIPS 180-3。 FIPS 180-3 只允许使用 5 个安全 [hashes] (http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf),MD5 不是其中之一。因此,我试图以编程方式从 Sun 提供程序中删除 MD5 算法。这是示例代码。
public static void main(String[] args) throws Exception {
Security.removeProvider("SUN");
Sun sun = new Sun();
sun.remove("MessageDigest.MD5"); //Comment and it will work !!!
Security.addProvider(sun);
Cipher ciph = Cipher.getInstance("AES");
}
但这会抛出以下异常。如果您评论“sun.remove(..”,程序工作正常。如果我删除 MD2,而不是 MD5,那么它也可以正常工作。
在我看来,jre 库似乎使用 MD5 进行签名,但我检查了 jre/lib/ext/sunjce_provider.jar 签名器及其使用的 sha1。
知道为什么我的代码会因此错误而失败吗?
线程“main”中的异常 java.lang.ExceptionInInitializerError 在 javax.crypto.Cipher.getInstance(DashoA13*..) 在 TestRemoveMD5.main(TestRemoveMD5.java:20)
引起:java.lang.SecurityException:无法为受信任的 CA 设置证书 在 javax.crypto.SunJCE_b.(DashoA13*..) ... 还有 3 个
引起:java.lang.SecurityException:签名类已被篡改 在 javax.crypto.SunJCE_b.d(DashoA13*..) 在 javax.crypto.SunJCE_b.c(DashoA13*..) 在 javax.crypto.SunJCE_b$1.run(DashoA13*..) 在 java.security.AccessController.doPrivileged( native 方法) ... 还有 4 个
最佳答案
这是一项安全功能,可防止不受信任的代码删除 Sun 提供程序。有一种方法可以做到这一点,包括拥有适当的权限。如果你去这个链接 http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html并向下滚动到 The Security Class 标题,您可以阅读有关如何删除提供商以及将会发生什么的信息。
编辑
从检查已安装的非扩展提供程序的文档中摘录可能需要策略文件来执行某些操作,例如添加和删除提供程序。值得一试。
The documentation from the vendor of each provider you will be using should include information as to which permissions it requires, and how to grant such permissions. For example, the following permissions may be needed by a provider if it is not an installed extension and a security manager is installed
-
The Security class manages installed providers and security-wide properties. It only contains static methods and is never instantiated. The methods for adding or removing providers, and for setting Security properties, can only be executed by a trusted program. Currently, a "trusted program" is either
- a local application not running under a security manager, or
- an applet or application with permission to execute the specified method (see below).
The determination that code is considered trusted to perform an attempted action (such as adding a provider) requires that the applet is granted the proper permission(s) for that particular action.
-
Each "grant" statement in such a file grants a specified code source a set of permissions, specifying which actions are allowed.
Here is a sample policy configuration file:
grant codeBase "file:/home/sysadmin/", signedBy "sysadmin" {
permission java.security.SecurityPermission "insertProvider.*";
permission java.security.SecurityPermission "removeProvider.*";
permission java.security.SecurityPermission "putProviderProperty.*";
};
关于java - 为什么JCE初始化需要MD5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11208380/
是否可以将通过 ncipher JCE API 生成的 key “重定向”到 pkcs11?我知道您可以通过 generatekey 命令重新定位,但我不知道如何对现有的 JCE key 执行此操作。
你能帮我指出默认的 RSA 填充是什么吗? 准确地说,如果我如下创建密码实例,确保 java 使用某种填充作为加密文本字节长度始终显示 256 字节的 2048 RSA key ,无论纯文本是一个字符
这个问题在这里已经有了答案: How to avoid installing "Unlimited Strength" JCE policy files when deploying an appl
我正在尝试使用 jasypt 使用基于密码的 aes 加密来加密一个简单的字符串,并且我在很多代码示例中遇到该算法以字符串形式给出,如“PBEWithSHA512AndAES256-CBC-BC”。我
我需要编写一个 java JCE 提供程序。我已经在网上查了好几天了,但找不到解决方案。您能给我一些有用的信息吗?问候, 最佳答案 文档是 here和 here ,但是你为什么要这样做呢?大多数主流加
我有一个 Joomla! 3.3.3 并且我正在使用 JCE。我的问题是编辑器没有在工具栏上显示按钮的图标。使用 Firebug,我意识到这是所有主题的 css 路径中的问题。 在本例中,我使用的是
如我所见document ,JCE 有多个提供者。如何找出默认可用的提供程序? 最佳答案 调用Security.getProviders() ,例如 for (Provider provider :
在 JRE 更新后,JCE 策略文件(位于 {java.home}/lib/security)是否被标准强度策略文件覆盖?还是这些在 JRE 更新中单独存在? 编辑:有谁知道 Mac OS X JRE
是否可以使用 Java 的 JCE 库加密整个文件夹。如果有问题,这些文件夹将包含其他文件夹/文件。对于那些不知道 JCE 是什么的人,它代表 Java Cryptography Extension,
我正在使用以下代码来获取 AESCMAC Mac mac = Mac.getInstance("aescmac", new BouncyCastleProvider()); mac.init(k_ma
我已经安装了JDK 7 。其中已包含以下 JAR: local_policy US_export_policy 但是当我开始申请时,我面临着 JCE error 。所以我用谷歌搜索并下载了JDK 7
有谁知道为什么我无法在 Eclipse 中查看“Cipher”的源代码?源代码在那里,我可以看到 openjdk 中的一些其他内置源代码,例如“println”,但无法弄清楚为什么我无法查看“Ciph
我必须运行一个相当旧的程序代码,它使用 ABA-provider for JCE。所有类都可以在源文件夹中找到。但是,会出现 NoSuchProviderException:“JCE 无法验证提供程序
我开发了一个应用程序,在 BountyCaSTLe.jar 的帮助下,我在其中使用了密码术。我还有一行 Security.addProvider(new org.bouncycaSTLe.jce.pr
我们有自定义的 JCE 安全提供商,它使用我们的智能卡来执行加密操作。 当我们尝试使用某些类(如 Cipher、KeyAgreement、KeyGenerator、Mac 或 SecretKeyFac
我有一个关于 JCE 加密的问题。您如何用 Java 编写自己的加密算法/ key 生成器,可以将其作为 .jar 文件安装在 ext 目录中?我想出了算法的基本思想,但我不知道如何实现它。我是否将
我正在开发一个程序,我将使用该程序使用 JCE 来加密和解密文件。我的加密和解密在默认模式 (ECB/PKCS5PADDING) 下正常工作,但是当我尝试使用 CBC 并解密我的文件时,我得到的一些文
我们已将 Java 产品配置为仅使用经 FIPS 验证的 RSA JCE 加密提供程序。但是,当 只有 RSA 库在 java.security 中列出时,该产品将无法工作。因此,有些东西正在向其他提
Sun 的 PKCS11 JCE 安全提供程序缺少我们需要的一些功能。 所以我使用原始资源编写了它的增强版本。 不幸的是,JCE 基础设施拒绝了新的提供者 “JCE 无法验证提供者” 因为它没有正确签
不论是JCE还是CKEDITOR,都没解决中文名文件的问题,要么上传失败,要么传上去了中文名不能被web访问。相比之下,JCE更加人性化,比如文件上传后默认被选中,不需用户在那么小的弹出窗口去上下翻
我是一名优秀的程序员,十分优秀!