【密码学】 |
您所在的位置:网站首页 › websphere官方文档 › 【密码学】 |
👨💻作者简介:大山里的菜籽儿 📖所属专栏:《密码学》 ❤️🔥个人感悟:技术如山,登其一山,再现一山。 👦适用人群:有密码学基础的人群 大家都知道安全性,也是JAVA重要特性之一。但是其安全性体现在哪里呢?异常处理机制、垃圾回收机制等等。那么除了这些还有什么呢?那就是JCA体系,它到底是什么?这篇文章就带你认识一下。那要是跟它认识了,以后应用程序中使用安全服务的时候,不就是打声招呼的事情吗? 📁JCA是什么JCA全称为Java Cryptography Architecture,译为Java加密体系。JCA包括Provider的架构以及一系列数字签名、信息摘要、证书、证书验证、加密和随机数产生的API等等。这些API可以让开发人员简单的将安全服务集成到应用程序中。 个人理解:与JDBC类似,JDBC提供数据库操作服务,JCA提供安全服务。 📁设计原则 📂实现独立性实现独立性:应用程序不需要实现安全算法。 只需要向JCA请求安全服务,由Provider提供,调用其标准接口便可以集成到应用程序中。应用程序可能会依赖多个独立提供者(Provider)实现安全服务。 📂实现互操作性实现互操作性:Provider可以跨应用互相操作。 应用程序不绑定到特定的provider,并且provider不绑定到特定的程序。也就意味着对于相同算法,Provider间产生的密钥或者签名可以互相使用。 📂算法可拓展性算法可拓展性:JCA中包含基础的安全服务Provider。 如果基础的安全服务Provider不满足应用加密需求,也可以支持自定义的Provider安装。 📁JCA实现架构 📂简要描述实现过程0️⃣java.security.Provider是所有安全Provider的基类,也就是图中的Provider安全服务 。 1️⃣每个CSP,全称为(Cryptographic Service Providers)都包含一个类的实例。也就是图中的MessageDigest Provider实例,并且每个实例都有其实现的安全算法。比如图中的ProviderA、B、C分别实现了不同的散列算法。 2️⃣使用JCA时,采用以下API请求特定类型算法对象以及安全服务。如果不是特定的Provider则采用上图的方式从ProviderA->ProviderC依次搜索的指定的安全算法服务,否则直接定位到特定的安全算法服务。 //不是特定的Provider md = MessageDigest.getInstance("SHA-512"); //特定的Provider md = MessageDigest.getInstance("SHA-512", "ProviderB"); 📂详细实现,举例说明经过上一小节的简易描述实现,可能大家还有些懵懂,这一节以某应用程序想要实现DES加密安全服务为例,让大家更详细的了解实现过程。
可参照下方代码理解。 import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.security.SecureRandom; /** * @BelongsProject: jcademo * @BelongsPackage: desdemo * @Author: shoanjen * @CreateTime: 2023-03-14 16:15 * @Description: TODO * @Version: 1.0 */ public class Des { /** * @description: * @author: shoanjen * @date: 2023/3/14 16:20 * @param: [dataDes, wordPass],dataDes为要加密的数据,wordPass为加密密码, * @return: byte[] **/ public byte[] desCrypto(byte[] dataDes, String wordPass) { try{ //可信任随机数源 SecureRandom random = new SecureRandom(); DESKeySpec desKey = new DESKeySpec(wordPass.getBytes()); //创建密钥工厂 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); //生成DES加密密钥 SecretKey securekey = keyFactory.generateSecret(desKey); //Cipher对象实际完成加密操作,就是图中过程的第一步 Cipher cipher = Cipher.getInstance("DES"); //init初始化des实例 cipher.init(Cipher.ENCRYPT_MODE, securekey, random); return cipher.doFinal(dataDes); }catch(Throwable e){ e.printStackTrace(); } return null; } }附重要源码解析图,帮助理解 感谢大家的阅读,如有建议或错误,烦请提出与指正。一个初入密码行业的java开发,希望与大家共同进步。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |