茶叶企业网站源码wordpress改了固定链接出现404
web/
2025/10/8 4:11:13/
文章来源:
茶叶企业网站源码,wordpress改了固定链接出现404,仿网链网站源代码下载,建设外贸网站价格jca使用Java密码体系结构#xff08;JCA#xff09;是一个可扩展的框架#xff0c;使您能够使用执行加密操作。 JCA还促进实现独立性#xff08;程序不应该在乎谁提供加密服务#xff09;和实现互操作性#xff08;程序不应该与特定加密服务的特定提供者联系在一起#… jca使用 Java密码体系结构JCA是一个可扩展的框架使您能够使用执行加密操作。 JCA还促进实现独立性程序不应该在乎谁提供加密服务和实现互操作性程序不应该与特定加密服务的特定提供者联系在一起。 JCA允许将众多密码服务例如密码密钥生成器消息摘要捆绑到java.security.Provider类中并声明式地注册在特殊文件java.security中或者通过java.security.Security类以编程方式进行注册方法addProvider。 尽管JCA是标准但是不同的JDK实施JCA的方式有所不同。 在Sun / Oracle和IBM JDK之间IBM JDK比Oracle更“有序”。 例如IBM的超级提供程序com.ibm.crypto.provider.IBMJCE实现以下密钥库格式JCEKSPKCS12KSPKCS12JKS。 Oracle JDK将密钥库格式实现“传播”到以下提供程序中 sun.security.provider.Sun – JKS com.sun.crypto.provider.SunJCE – JCEKS com.sun.net.ssl.internal.ssl.Provider – PKCS12 尽管流行的建议是编写不指向特定Provider类的应用程序但是在某些用例中需要应用程序/程序确切了解Provider类提供的服务。 当支持可能与特定JDK例如与IBM JDK捆绑在一起的WebSphere紧密耦合的多个应用程序服务器时此要求变得更加普遍。 我通常使用Tomcat Oracle JDK进行开发更轻便更快但是我的测试/生产设置是WebSphere IBM JDK。 为了使事情更加复杂我的项目需要使用硬件安全模块HSM该模块通过提供程序类com.ncipher.provider.km.nCipherKM使用JCA API。 因此当我在家时无法访问HSM我想继续编写代码但至少要在JDK提供程序上对代码进行测试。 然后在将代码提交到源代码管理之前我可以切换为使用nCipherKM提供程序进行另一轮单元测试。 通常的假设是一个提供程序类就足够了例如对于IBM JDK来说是IBMJCE对于Oracle JDK是SunJCE。 因此通常的解决方案是实现一个指定一个提供程序的类并使用反射来避免由于“未找到类”而导致的编译错误 //For nShield HSM
Class c Class.forName(com.ncipher.provider.km.nCipherKM);
Provider provider (Provider)c.newInstance();//For Oracle JDK
Class c Class.forName(com.sun.crypto.provider.SunJCE);
Provider provider (Provider)c.newInstance();//For IBM JDK
Class c Class.forName(com.ibm.crypto.provider.IBMJCE);
Provider provider (Provider)c.newInstance(); 这种设计是可以的直到遇到在Oracle JDK上运行某些单元测试用例的NoSuchAlgorithmException错误。 我使用的算法是RSA这是一种常见算法 怎么可能文档说支持RSA 相同的测试用例在IBM JDK上运行良好。 经过进一步的调查我感到非常沮丧的是SunJCE提供程序没有用于RSA的KeyPairGenerator服务的实现。 但是可以在提供程序类sun.security.rsa.SunRsaSign中找到实现。 因此“ 1提供者全部提供”的假设被打破了。 但是由于有了JCA的开放API在请求Service实例时可以传递Provider对象例如 KeyGenerator kgen KeyGenerator.getInstance(AES, provider); 为了帮助检查各种Provider对象我提供了一个JUnit测试以漂亮地打印出JDK中每个已注册Provider实例的各种服务。 package org.gizmo.jca;import java.security.Provider;
import java.security.Provider.Service;
import java.security.Security;
import java.util.Comparator;
import java.util.SortedSet;
import java.util.TreeSet;import javax.crypto.KeyGenerator;import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.junit.Test;public class CryptoTests {Testpublic void testBouncyCastleProvider() throws Exception {Provider p new BouncyCastleProvider();String info p.getInfo();System.out.println(p.getClass() - info);printServices(p);}Testpublic void testProviders() throws Exception {Provider[] providers Security.getProviders();for(Provider p : providers) {String info p.getInfo();System.out.println(p.getClass() - info);printServices(p);}}private void printServices(Provider p) {SortedSetservices new TreeSet(new ProviderServiceComparator());services.addAll(p.getServices());for(Service service : services) {String algo service.getAlgorithm();System.out.println( Service: service.getType() - algo);}}/*** This is to sort the various Services to make it easier on the eyes...*/private class ProviderServiceComparator implements Comparator{Overridepublic int compare(Service object1, Service object2) {String s1 object1.getType() object1.getAlgorithm();String s2 object2.getType() object2.getAlgorithm();;return s1.compareTo(s2);}}
} 无论如何如果您使用的算法是通用的并且足够强大可以满足您的需求那么可以使用BouncyCastle提供程序。 它在所有JDK针对IBM和Oracle进行了测试上都能很好地工作。 BouncyCastle不支持JKS或JCEKS密钥库格式但是如果您不太挑剔则BC密钥库格式可以正常工作。 BouncyCastle也是开源的可以免费包含在您的应用程序中。 提示 JKS密钥库无法存储SecretKeys。 您可以尝试做功课 希望本文能启发您进一步探索JCA或者至少在与JCA合作时意识到“幸福的无知”的陷阱。 参考 YK研讨会的博客中 使用JCA的密码学-来自我们JCG合作伙伴 Allen Julia的“ 提供者中的服务” 。 翻译自: https://www.javacodegeeks.com/2013/03/cryptography-using-jca-services-in-providers.htmljca使用
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88864.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!